1. 程式人生 > >JavaWeb配置資料來源

JavaWeb配置資料來源

1.資料來源和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。

2.配置資料來源

  資料來源的配置涉及修改server.xml和web.xml檔案

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

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

  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名稱;

auth:可選填Container或Application,指定Resource的管理者;

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

maxActive:設定資料庫連線池中活動狀態連線的最大數目,為0則不受限制;

maxIdle:設定資料庫連線池中空閒狀態連線的最大數目,為0則不受限制;

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屬性一致;



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


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