JavaWeb:Tomcat下配置數據源鏈接數據庫

習慣了以硬編碼的形式在程序中創建數據庫鏈接,用完就在finally語句塊中close一下就結束了。對於重視數據庫鏈接數的應用來講,這樣子作會耗費大量的時間和數據庫資源,並且硬編碼的形式也不甚靈活。 java

 

Tomcat這個Java Web容器下經過配置DataSource(數據源)對象能夠解決上面所述的問題。JDBC中的javx.sql.DataSource接口負責創建於數據庫的鏈接,程序中直接從數據源中獲取數據庫鏈接。DataSource對象由Servlet容器Tomcat進行管理,其實獲取數據庫鏈接是從鏈接池中選取空閒鏈接。它基於Java中的JNDIJava 命名與目錄接口)來實現。 mysql

 

配置數據源context.xml web

Java Web應用的META-INF目錄下新建一個context.xml配置文件,其中的<Resource>元素用於定義JNDI資源,內容以下:sql

  
  
           
  
  
  1. <Context reloadable="true" > 
  2.     <Resource  
  3.         name="jdbc/ DBname " 
  4.         auth="Container"  
  5.         type="javax.sql.DataSource" 
  6.         maxActive="100" maxIdle="30" maxWait="10000" 
  7.         username="root" password="123"  
  8.         driverClassName="com.mysql.jdbc.Driver" 
  9.         url="jdbc:mysql://localhost:3306/ DBname?autoReconnect=true" 
  10.     /> 
  11. </Context> 

 

<Resource>元素的屬性說明:   數據庫

Name:指定Resource資源的JNDI名稱; app

auth:可選填ContainerApplication,指定Resource的管理者; ide

type:指定Resource資源的Java類名; 編碼

maxActive:設置數據庫鏈接池中活動狀態鏈接的最大數目,爲0則不受限制; url

maxIdle:設置數據庫鏈接池中空閒狀態鏈接的最大數目,爲0則不受限制; spa

maxWait:設置數據庫鏈接池中空閒狀態鏈接的最長等待時間,超時則拋出異常,爲-1則可無限等待;

username:指定數據庫的用戶名;

password:指定鏈接數據庫的密碼;

driverClassName:指定數據庫的JDBC驅動器的Driver實現類名字(這裏爲MySQL數據庫鏈接);

url:鏈接數據庫的url

 

注:可在<CATALINA_HOME>/conf/server.xml 文件中的對應<Host>元素中如上配置<Resource>子元素以供Tomcat容器內的多個Web應用使用。

 

配置JNDI資源引用web.xml 

Java Web應用中要使用JNDI資源,必須在web.xml中配置對該JNDI資源的引用<resource-ref>元素。內容以下:

  
  
           
  
  
  1. <web-app> 
  2.     <resource-ref> 
  3.         <description>DB Connection</description> 
  4.         <res-ref-name>jdbc/DBname </res-ref-name> 
  5.         <res-type>javax.sql.DataSource</res-type> 
  6.         <res-auth>Container</res-auth> 
  7.     </resource-ref> 
  8. </web-app> 

 

<resource-ref>元素的子元素說明:  

description:對所引用JNDI資源的描述;

res-ref-name:引用的JNDI資源的名稱,與上面<Resource>元素中的name屬性一致;

res-type:引用的JNDI資源的類名稱,與上面<Resource>元素中的type屬性一致;

res-auth:引用資源的管理者,上面<Resource>元素中的auth屬性一致;

 

Web應用中使用數據源: 

使用DataSource鏈接數據庫,再也不用如下方式來創建到數據庫的鏈接了。

  
  
           
  
  
  1. Connection conn = null
  2.                      
  3. Class.forName("com.mysql.jdbc.Driver"); 
  4.                      
  5. String dbUrl = "jdbc:mysql://localhost:3306/DBname"
  6. String dbUser = "root"
  7. String dbPwd = "123"
  8.                      
  9. conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd); 

 

而是使用相對簡單些的JNDI資源訪問方式lookup方法,以下:

  
  
           
  
  
  1. Context sourceCtx = new InitialContext(); 
  2. DataSource ds = 
  3. (DataSource) sourceCtx.lookup("java:comp/env/jdbc/ DBname "); 
  4. conn = ds.getConnection(); 

   

注:使用DataSource方式鏈接數據庫,當使用完數據庫操做以後調用各類資源對象的close方法時,由Tomcat容器調回這些鏈接到鏈接池中進行管理,而不是直接與數據庫斷開鏈接。

相關文章
相關標籤/搜索