tomcat中數據庫連接池的配置

介紹

數據庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤爲突出。對數據庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。數據庫連接池正是針對這個問題提出來的。

 

1 數據庫連接池基礎

1.1 什麼是數據庫連接池

數據庫連接池負責分配、管理和釋放數據庫連接,它允許應用程序重複使用一個現有的數據庫連接,而再不是重新建立一個;釋放空閒時間超過最大空閒時間的數據庫連接來避免因爲沒有釋放數據庫連接而引起的數據庫連接遺漏。這項技術能明顯提高對數據庫操作的性能。 數據庫連接池在初始化時將創建一定數量的數據庫連接放到連接池中,這些數據庫連接的數量是由最小數據庫連接數來設定的。無論這些數據庫連接是否被使用,連接池都將一直保證至少擁有這麼多的連接數量。連接池的最大數據庫連接數量限定了這個連接池能佔有的最大連接數,當應用程序向連接池請求的連接數超過最大連接數量時,這些請求將被加入到等待隊列中。

1.2 配置要素

數據庫連接池的最小連接數和最大連接數的設置要考慮到下列幾個因素:

1) 最小連接數是連接池一直保持的數據庫連接,所以如果應用程序對數據庫連接的使用量不大,將會有大量的數據庫連接資源被浪費;

2) 最大連接數是連接池能申請的最大連接數,如果數據庫連接請求超過此數,後面的數據庫連接請求將被加入到等待隊列中,這會影響之後的數據庫操作。 

3) 如果最小連接數與最大連接數相差太大,那麼最先的連接請求將會獲利,之後超過最小連接數量的連接請求等價於建立一個新的數據庫連接。不過,這些大於最小連接數的數據庫連接在使用完不會馬上被釋放,它將被放到連接池中等待重複使用或是空閒超時後被釋放。

 

 

2 功能實現

現在,讓我們來看看如何使用數據庫連接池。

環境:

  • OS:windows XP
  • DB:MySql
  • Server:Tomcat 5.x

 

2.1 配置

在設置mysql連接池之前,要保證在%tomcathome%/common/lib下面有mysql-connector-java-3.1.11-bin.jar這個mysql驅動程序。
在tomcat安裝目錄的/conf/Catalina/localhost文件夾裏面建一個名爲mysql.xml 然後加入以下代碼:

<?xml version='1.0' encoding='utf-8'?> 
<Context docBase="TextChatRoom" path="/TextChatRoom" reloadable="true"> 
<Resource name="jdbc/mysqldb" auth="Container" type="javax.sql.DataSource"/> 
<ResourceParams name="jdbc/mysqldb"> 
<parameter> 
<name>factory</name> 
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value> 
</parameter> 

<!-- Maximum number of dB connections in pool. Make sure you configure your mysqld max_connections large enough to handle all of your db connections. Set to 0 for no limit. --> 
<parameter> 
<name>maxActive</name> 
<value>100</value> 
</parameter> 

<!-- Maximum number of idle dB connections to retain in pool. Set to 0 for no limit. --> 
<parameter> 
<name>maxIdle</name> 
<value>30</value> 
</parameter> 

<!-- Maximum time to wait for a dB connection to become available in ms, in this example 10 seconds. An Exception is thrown if this timeout is exceeded. Set to -1 to wait indefinitely. --> 
<parameter> 
<name>maxWait</name> 
<value>10000</value> 
</parameter> 

<!-- MySQL dB username and password for dB connections --> 
<parameter> 
<name>username</name> 
<value>user</value> 
</parameter> 
<parameter> 
<name>password</name> 
<value>pwd</value> 
</parameter> 

<!-- Class name for mm.mysql JDBC driver --> 
<parameter> 
<name>driverClassName</name> 
<value>com.mysql.jdbc.Driver</value> 
</parameter> 

<!-- The JDBC connection url for connecting to your MySQL dB. The autoReconnect=true argument to the url makes sure that the mm.mysql JDBC Driver will automatically reconnect if mysqld closed the connection. mysqld by default closes idle connections after 8 hours. --> 
<parameter> 
<name>url</name> 
<value>jdbc:mysql://dbAddress:3306/databaseName</value> 

<!--must use & not use & --> 
</parameter> 
</ResourceParams>

</Context> 

 

  • 說明:
  • docBase:就是你的webApps路徑和名字(D:/oatomcat/webapps/oa)。
  • path:你可以設置爲"/" 那麼這樣在瀏覽器裏應該是http://localhost:8080/oa/纔會到達首頁。
  • reloadable:如果設置爲true那麼改了server.xml配置或者說改了web.xml配置或者說是改了.class以後不用重啓tomcat他會自動裝載。
  • Resource name及ResourceParams name :這個就是數據庫連接池的名字。在程序之中所調用的池就是要調用它。
  • factory:一般是默認就可以了。
  • maxActive, maxIdle, maxWait: 自行設定,一般默認就可以了。
  • username:mysql用戶名
  • password:mysql密碼
  • driverClassName :mysql驅動程序名。
  • url:jdbc:mysql://192.168.1.1/sealmanager(mysql數據庫連接字符串)

確定以後沒有錯以後進行下一步,要在WEB-INF裏的web.xml里加上以下信息(一般加在最後):

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> 
<web-app> 
<description>mysqlDB</description> 
<resource-ref> 
<description>DB Connection</description> 
<res-ref-name>jdbc/mysqldb</res-ref-name> 
<res-type>javax.sql.DataSource</res-type> 
<res-auth>Container</res-auth> 
</resource-ref> 
</web-app> 

2.2 調用

下面要調用連接池,我們可以用下面的代碼:

public static synchronized Connection getMysqlConn() throws SQLException , NamingException{
try {
Context jndiCntx = new InitialContext();
DataSource ds = (DataSource) jndiCntx .lookup("java:comp/env/jdbc/mysqldb");
return ds.getConnection();
} catch (NamingException ne) {
throw ne; 
}
}

結束

在實習中,由於我們有多個應用程序同時訪問一個數據庫,所以執行效率很低。在解決問題的過程中,我們發現使用數據庫連接池是一個簡單而有效的方法。

引用自:http://www.supinfo-projects.com/cn/2006/conf%5Ftomcat%5Fpool%5Fcn/

 

 

如果需要連接oracle數據庫,只需要把連接字符串改成jdbc:oracle:thin:@YOURDBSERVER:1521:YOURDB的形式就可以了


發佈了13 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章