青草久久影院-青草久久伊人-青草久久久-青草久久精品亚洲综合专区-SM双性精跪趴灌憋尿调教H-SM脚奴调教丨踩踏贱奴

17站長網

17站長網 首頁 網站 服務器 查看內容

基于Tomcat 數(shù)據(jù)源的原理、配置、使用介紹

2022-10-22 22:35| 查看: 2060 |來源: 互聯(lián)網

1、數(shù)據(jù)源的作用及操作原理   在程序代碼中使用數(shù)據(jù)源是可以提升操作性能的,這種性能的提升依靠于運行的原理。  傳統(tǒng)JDBC操作步驟 1、加載數(shù)據(jù)庫驅動程 ...

1、數(shù)據(jù)源的作用及操作原理  

在程序代碼中使用數(shù)據(jù)源是可以提升操作性能的,這種性能的提升依靠于運行的原理。 

傳統(tǒng)JDBC操作步驟

1、加載數(shù)據(jù)庫驅動程序,數(shù)據(jù)庫驅動程序通過CLASSPATH配置;

2、通過DriverManager類取得數(shù)據(jù)庫連接對象;

3、通過Connection實例化PreparedStatement對象,編寫SQL命令操作數(shù)據(jù)庫;

4、數(shù)據(jù)庫屬于資源操作,操作完成后進行數(shù)據(jù)庫的關閉以釋放資源。如圖所示:

對于不同的用戶只有操作不同,但是對于1、2、4三個步驟很明顯是一個重復的操作。

如果開發(fā)中直接使用JDBC操作的話,那么就會產生這種性能的問題,那么怎么做最合適呢?

如果假設數(shù)據(jù)庫不關閉,以后如果有新的用戶使用的時候直接取一個已經有的連接的話。

就好比,學校為學生提供雨傘,一旦下雨將為學生準備雨傘,這個時候學生不用再重新去找雨傘,之后再重新去買雨傘。

假設有100把傘,如果現(xiàn)在不下雨,肯定不能把所有的傘都擺上,所以一般平常如果沒人用的時候至少擺上10把。當然,最大的時候只能提供100把傘。

還需要一個等待的時間。

最小維持的數(shù)據(jù)庫連接數(shù),最大允許打開的連接數(shù)。

Tomcat 4.1 版本之后就開始支持這種操作了,這種操作就稱為數(shù)據(jù)庫連接池,存放的是所有的數(shù)據(jù)庫連接。

2、在Tomcat中使用數(shù)據(jù)庫連接池

在web容器中,數(shù)據(jù)庫的連接池都是通過數(shù)據(jù)源(javax.sql.DataSource)訪問的,即:可以通過 javax.sql.DataSource 類取得Connection對象,但是如果要想得到一個DataSource對象需要使用JNDI進行查找。

JNDI(Java Naming and Directory Interface)屬于命名及目錄查找接口,主要的功能是用于進行查找的,查找對象。
但是,現(xiàn)在的數(shù)據(jù)庫的連接池是需要在Tomcat上完成配置的。

要修改server.xml文件才可以起作用。

如下,以連接mysql為例:

此配置有幾個參數(shù):

·name:表示數(shù)據(jù)源名稱,也是JNDI要查找的名稱

·auth:表示由誰負責資源連接,Container:容器管理,application:程序管理,一般設置為 Container

·type:表示對象,數(shù)據(jù)源上每一個綁定的都是DataSource

·maxActive:表示最大激活連接數(shù),這里取值為100,表示同時最多有100個數(shù)據(jù)庫連接,一般把maxActive設置成可能的并發(fā)量

·maxIdle:表示最大的空閑連接數(shù),這里取值為30,表示即使沒有數(shù)據(jù)庫連接時依然可以保持30空閑的連接,而不被清除,隨時處于待命狀態(tài)

·maxWait:表示最大等待秒鐘數(shù),這里取值10000,表示10秒后超時,如果取值-1,則表示無限等待,直到超時為止,如果超時將接到異常

·username:數(shù)據(jù)庫用戶名

·password:數(shù)據(jù)庫登錄密碼

·driverClassName:數(shù)據(jù)庫驅動名稱

.url:數(shù)據(jù)庫url

但是現(xiàn)在使用的Tomcat版本是6.0以上的版本,所以想讓一個數(shù)據(jù)源起作用的話,還必須在web.xml(注意:此web.xml是web項目的web.xml文件,而不是tomcat服務器的web.xml文件)文件之中完成配置。

jdbc/mydbjavax.sql.DataSourceContainer


3、查找數(shù)據(jù)源 

數(shù)據(jù)源的操作使用的是JNDI方式進行查找的,所以如果要想使用數(shù)據(jù)源取得數(shù)據(jù)庫連接的話,則必須按照如下的步驟進行

初始化名稱查找上下文:Context ctx = new InitialContext();

通過名稱查找DataSource對象:DataSource ds = (DataSource)ctx.lookup(JNDI名稱);

通過DataSource取得一個數(shù)據(jù)庫連接:Connection conn = ds.getConnection()。

此時調用數(shù)據(jù)庫會出現(xiàn)一個Exception:

javax.servlet.ServletException: javax.naming.NameNotFoundException: Name jdbc is not bound in this Context

實際上對于這種資源操作,本身是需要一個環(huán)境屬性的支持的: java:comp/env,但是Tomcat服務器本身是免費的,沒有對這種屬性提供支持,如果要想訪問Tomcat中的名稱服務的話,則肯定要在前面加上此屬性,即,現(xiàn)在的名稱是: java:comp/env/jdbc/mydb;即用Tomcat的話JNDI名稱就是:java:comp/env/JNDI名稱 。

以后程序中只認名字,而具體是哪個數(shù)據(jù)庫將由配置決定。

當然,如果現(xiàn)在使用的是DAO開發(fā)的,DatabaseConnection.java類。

package com.shawn.mvcdemo.dbc;

import java.sql.*;
import javax.sql.*;
import javax.naming.*;

public class DatabaseConnection{
 private static final String DSNAME = "java:comp/env/jdbc/mldn";//java:comp/JNDI名稱

 private Connection conn = null;

 public DatabaseConnection() throws Exception{
  Context ctx = new InitialContext();//初始化名稱查找上下文
  DataSource ds = (DataSource)ctx.lookup(DSNAME); //通過名稱查找DataSource對象
  this.conn = ds.getConnection();  //通過DataSource取得一個數(shù)據(jù)庫連接
 }

 public Connection getConnection(){
  return this.conn;
 }

 public void close() throws Exception{
  if(this.conn != null){
   try{
    this.conn.close();//釋放數(shù)據(jù)庫連接
   } catch(Exception e){
    throw e;
   }
  }
 }

 public static void main(String args[]){
  try{
   System.out.println(new DatabaseConnection().getConnection());
  } catch(Exception e){
   e.printStackTrace();
  }
 }
}

可是有一點也必須注意的是,現(xiàn)在的數(shù)據(jù)庫連接池實在Tomcat上配置的,所以此程序只能在web下運行,而不能使用application程序運行。

總結:

要使用數(shù)據(jù)庫連接池

1、配置server.xml;

2、配置web項目中的(比如:webdemo項目)web.xml文件,添加 resource-ref 配置;

3、修改程序中獲取Connection的方式。

本文最后更新于 2022-10-22 22:35,某些文章具有時效性,若有錯誤或已失效,請在網站留言或聯(lián)系站長:17tui@17tui.com
·END·
站長網微信號:w17tui,關注站長、創(chuàng)業(yè)、關注互聯(lián)網人 - 互聯(lián)網創(chuàng)業(yè)者營銷服務中心

免責聲明:本站部分文章和圖片均來自用戶投稿和網絡收集,旨在傳播知識,文章和圖片版權歸原作者及原出處所有,僅供學習與參考,請勿用于商業(yè)用途,如果損害了您的權利,請聯(lián)系我們及時修正或刪除。謝謝!

17站長網微信二維碼

始終以前瞻性的眼光聚焦站長、創(chuàng)業(yè)、互聯(lián)網等領域,為您提供最新最全的互聯(lián)網資訊,幫助站長轉型升級,為互聯(lián)網創(chuàng)業(yè)者提供更加優(yōu)質的創(chuàng)業(yè)信息和品牌營銷服務,與站長一起進步!讓互聯(lián)網創(chuàng)業(yè)者不再孤獨!

掃一掃,關注站長網微信

大家都在看

熱門排行

    最近更新

      返回頂部
      主站蜘蛛池模板: 久久国产精品自线拍免费 | 强开乳罩摸双乳吃奶视频 | 女人高潮特级毛片 | 亚洲午夜性春猛交XXXX | 野花视频在线观看免费最新动漫 | 亚洲欧美自拍明星换脸 | 金瓶梅 快播| 久久国产精品自线拍免费 | Chinesetube国产中文 | 超碰 无码 中文字幕 | 日本不卡一二三 | 国内精品久久久久影院网站 | 亚洲性爱城 | 羞羞影院午夜男女爽爽免费 | 2019在秋霞理论 | 欧美男男网站免费观看videos | 国产69精品麻豆久久久久 | 涩涩游戏盒| 亚洲欧美中文日韩视频 | 超碰免费视频部落格 | 欧美日韩高清一区二区三区 | 影音先锋av333资源网 | 欧美精品一区二区三区四区 | 中文字幕 人妻熟女 | 亚洲中文字幕永久在线全国 | 99久久夜色精品国产亚洲AV卜 | 中文字幕福利视频在线一区 | 成 人 网 站毛片 | 久久秋霞理伦片 | 边做边爱BD免费看片 | 国产av在在免费线观看美女 | 三级貂蝉艳史 在线观看 | 最近中文字幕mv手机免费高清 | 四虎国产精品永久一区高清 | 99精品99| 亚洲色tu| 免费看a毛片 | 俄罗斯女人与马Z00Z视频 | 色久天| 男女疯狂一边摸一边做羞羞视频 | 国产福利视频一区二区 |