程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Tomcat數據源(DataSource)簡介,tomcatdatasource

Tomcat數據源(DataSource)簡介,tomcatdatasource

編輯:JAVA綜合教程

Tomcat數據源(DataSource)簡介,tomcatdatasource


JDBC2.0提供了javax.sql.DataSource接口,它負責建立與數據庫的連接,在應用程序中訪問數據庫時不必編寫連接數據庫的代碼,可以直接從數據源獲得數據庫連接

1.數據庫和連接池

  在DataSource中事先建立了多個數據庫連接,這些數據庫連接保存在連接池(ConnectPool)中。java程序訪問數據庫時,只需要從連接池中取出空閒狀態的數據庫連接,當程序訪問數據庫結束,再將數據庫連接放回連接池,這樣做可以調高訪問數據庫的效率。

  如果Web應用每次接收到客戶的請求,都和數控建立一個連接,數控操作結束就斷開連接,這樣會消費大量的時間和資源。因為數據庫每次配置連接都要將Connection對象加載到內存中,再驗證用戶名和密碼。

2.數據源和JNDI資源

  由於DataSource對象是由Tomcat提供的,因此不能夠在程序中創建一個DataSource對象,而要采用JNDI技術來獲得DataSource對象的引用。

  可以簡單的把JNDI理解為一種將對象和名字綁定的技術,對象工廠負責生產出對象,這些對象都和唯一的名字綁定,外部程序可以通過名字來獲得某個對象的引用。在javax.naming包中提供了Context接口,該接口提供了將對象和名字綁定,以及通過名字檢索對象的方法。

  Context接口方法

方 法 描 述 bind(String name,Object obj) 將對象與一個名字綁定 lookup(String name) 返回與指定的名字綁定的對象

  Tomcat把DataSource作為一種可配置的JNDI資源來處理。生成DataSource對象的工廠org.apache.commons.dbcp.BasicDataSourceFactory。

3.配置數據源

  數據源的配置涉及修改server.xml和web.xml文件

  (1)在server.xml中加入<Resource>元素

    <Resource>元素用來定義JNDI Resource。例如:

    <Context path="/bookstore" docBase="bookstore" debug="0" reloadable="true">

    <Resource name="jdbc/BookDB" auth="Container" type="javax.sql.DataSource"/>

    <ResourceParams name="jdbc/BookDB">

      <parameter>

        <name>factory</name>

        <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>

      </parameter>

      

      <parameter>

        <name>maxActive</name>

        <value>100</value>

       </parameter>

 

      <parameter>

        <name>maxIdle</name>

        <value>30</value>

        </parameter>

 

      <parameter>

        <name>maxWait</name>

        <value>10000</value>

      </parameter>

     

      <parameter>

        <name>username</name>

        <value>dbuser</value>

      </parameter>

 

      <parameter>

        <name>password</name>

        <value>123456</value>

      </parameter>

 

      <parameter>

        <name>driverClassName</name>

        <value>com.mysql.jdbc.Driver</value>

      </parameter>

  

      <parameter>

        <name>url</name>

        <value>jdbc:mysql://localhost:3306/BookDB?autoReconnect=true</value>

      </parameter>

    </ResourceParams>

</Context>

 

<Resource>屬性說明:

  name:指定Resource的JNDI名字。

  auth:指定管理Resource的Manager.它有兩個值可選:Container和Application。Container表示由容器來創建和管理Resource,Application表示由Web應用來創建和管理Resource

  type:指定Resource所屬的JAVA類名。

在<ResourceParam>元素中指定了配置BookDB數據源的參數,<ResourceParam>元素的參數說明如下:

  factory:指定生成DataResource的factory類名。

  maxActive:指定數據庫連接池中處於活動狀態的數據庫連接的最大數目,取值為0,表示不受限制。

  maxIdle:指定數據庫連接池中處於空閒狀態的數據庫連接的最大數目,取值為0,表示不受限制。

  maxWait:指定數據庫連接池中的數據庫連接處於空閒狀態的最長時間(單位:毫秒),超過這一時間,將超時異常。取值為-1,表示可以無限等待。

  username:指定連接數據庫用戶名

  password:指定連接數據庫密碼

  driverClassName:指定連接數據庫的JDBC驅動

  url:指定連接數據庫的URL。

(2)在web.xml中加入<resource-ref>元素

  如果web應用訪問了由servlet容器管理的某個JNDI Resource,必須在web.xml文件中聲明對這個JNDI Resource的引用。表示資源引用的元素為<resource-ref>,以下是聲明應用jdbc/BookDB數據源代碼

  <webapp>

    <resource-ref>

      <description>DB Connection</description>

      <res-ref-name>jdbc/BookDB</res-ref-name>

      <res-type>javax.sql.DataSource</res-type>

      <res-auth>Container</res-auth>

    </resource-ref>

  </webapp>

resource-ref屬性說明:

   description:指定所引用的資源的說明

   res-ref-name:指定所引用資源的JNDI名字,與<Resource>元素中name屬性對應

    res_type:指定所引用資源的類名,與<Resource>元素中的type屬性對應

   res-auth:指定管理所引用資源的Manager,與<Resource>元素中的auth屬性對應

 

4.程序中訪問數據源

  javax.naming.Context提供了查找JNDI Resource的接口,例如:可以通過以下代碼獲得jdbc/BookDB數據源的應用:

    Context ctx = new InitialContext();

    DataSource ds =(DataSource)ctx.lookup("java:comp/env/jdbc/BookDB");

  得到DataSource對象的引用後,就可以通過DataSource的getConnection()方法獲得數據庫的連接對象:

    Connection con = ds.getConnection();

  當程序結束數據庫訪問後,應該調用Connection的close()方法,及時將Connection返回數據庫連接池,使Connection恢復空閒狀態。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved