国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務(wù)器 > Web服務(wù)器 > 正文

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

2024-09-01 13:52:52
字體:
供稿:網(wǎng)友

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

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

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

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

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

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

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

Tomcat,數(shù)據(jù)源,配置

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

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

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

就好比,學(xué)校為學(xué)生提供雨傘,一旦下雨將為學(xué)生準(zhǔn)備雨傘,這個時候?qū)W生不用再重新去找雨傘,之后再重新去買雨傘。

假設(shè)有100把傘,如果現(xiàn)在不下雨,肯定不能把所有的傘都擺上,所以一般平常如果沒人用的時候至少擺上10把。當(dāng)然,最大的時候只能提供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進(jìn)行查找。

Tomcat,數(shù)據(jù)源,配置

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

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

如下,以連接mysql為例:

<Context docBase="D:/data/webdemo" path="/webdemo" debug="0" reloadable="true">  <Resource name="jdbc/mydb"    auth="Container"    type="javax.sql.DataSource"    maxActive="100"    maxIdle="30"    maxWait="10000"    username="root"    password="root"    driverClassName="org.gjt.mm.mysql.Driver"    url="jdbc:mysql://localhost:3306/mydb"/></Context>

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

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

·auth:表示由誰負(fù)責(zé)資源連接,Container:容器管理,application:程序管理,一般設(shè)置為 Container

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

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

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

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

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

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

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

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

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

<resource-ref> <res-ref-name>jdbc/mydb</res-ref-name>  <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth></resource-ref>

 

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

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

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

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

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

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

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

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

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

當(dāng)然,如果現(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();  } }}

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

總結(jié):

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

1、配置server.xml;

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

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

以上這篇基于Tomcat 數(shù)據(jù)源的原理、配置、使用介紹就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網(wǎng)。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 交城县| 佳木斯市| 南华县| 茌平县| 平利县| 台东县| 广灵县| 华坪县| 靖州| 秦安县| 郸城县| 龙井市| 江门市| 简阳市| 德昌县| 卢氏县| 华容县| 永春县| 安康市| 定安县| 大邑县| 南城县| 台湾省| 陆川县| 芜湖市| 土默特左旗| 高邑县| 库尔勒市| 五峰| 安多县| 乃东县| 南召县| 扎兰屯市| 宁津县| 淮滨县| 铁岭县| 株洲县| 陇南市| 沁源县| 霍城县| 旅游|