公司里用的連接池都是自己寫好了,封裝起來的,做大型項目的時候,非常有用,但近段時間總是發(fā)現(xiàn)數(shù)據(jù)庫連接過多,造成數(shù)據(jù)庫連接壓力過大,網(wǎng)站無法訪問等嚴(yán)重后果,我們做的網(wǎng)站主要是用于移動公司的后臺,經(jīng)常會處理很大"群集任務(wù)",找了很長時間,發(fā)現(xiàn)是程序里有很多打開的連接沒有關(guān)閉,放回到連接池里去,造成連接數(shù)不夠的問題.
后來上網(wǎng)上找了這個PROXOOL連接池插件,發(fā)現(xiàn)有自動KILL不活動的連接的功能.而且有VIEW方式查看連接情況,而且很多數(shù)據(jù)都是配置完成。決定在項目中試驗一下。
官方網(wǎng)址:http://proxool./ 當(dāng)前版本:proxool-0.9.0RC2
1、下載proxool 地址:http://proxool.
2、解壓縮proxool-0.9.0RC2.zip,拷貝lib/proxool-0.9.0RC2.jar到web-info/lib 拷貝jdbc驅(qū)動到web-info/lib
3、在web-info下建立文件:proxool.xml
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<alias>Test</alias>
<driver-url>jdbc:oracle:thin:@192.168.10.160:1521:orc1</driver-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver-properties>
<property name="user" value="test"/>
<property name="password" value="testpass"/>
</driver-properties>
<maximum-connection-count>10</maximum-connection-count>
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
</something-else-entirely>
4、在web.xml里新增如下:
<servlet>
<servlet-name>proxoolServletConfigurator</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
<init-param>
<param-name>xmlFile</param-name>
<param-value>WEB-INF/config/proxool.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- proxool提供的管理監(jiān)控工具,可查看當(dāng)前數(shù)據(jù)庫連接情況。如果運行不成功,請刪除本行 -->
<servlet>
<servlet-name>Admin</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Admin</servlet-name>
<url-pattern>/admin</url-pattern>
</servlet-mapping>
5、在調(diào)用數(shù)據(jù)庫連接代碼:
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
Connection conn = DriverManager.getConnection("proxool.Develop");
6、利用proxool監(jiān)控工具查看數(shù)據(jù)庫運行狀態(tài)。地址:./admin
以上配置是采用的XML文件方式,也可以采用properties配置方式:
proxool.alias=Test
proxool.driver-class=oracle.jdbc.driver.OracleDriver
proxool.driver-url=jdbc:oracle:thin:@192.168.10.160:1521:orcl
proxool.user=test
proxool.password=testpass
proxool.maximum-connection-count=20
proxool.prototype-count=4
proxool.house-keeping-test-sql=select sysdate from DUAL
proxool.verbose=true
proxool.statistics=10s,1m,1d
proxool.statistics-log-level=ERROR
<servlet>
<servlet-name>ServletConfigurator</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
<init-param>
<param-name>propertyFile</param-name>
<param-value>WEB-INF/config/Proxool.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
在調(diào)用數(shù)據(jù)庫連接代碼
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
Connection conn = DriverManager.getConnection("proxool.Test");
還有一些配置屬性:
maximum-connection-lifetime 最大連接生命周期 默認(rèn)值:4小時
maximum-active-time: 最大活動時間 默認(rèn)值:5分鐘
maximum-connection-count 最大連接數(shù) 默認(rèn)值:15個
minimum-connection-count 最小連接數(shù) 默認(rèn)值:5個
在用admin調(diào)用的時候,可以查看這個WEB應(yīng)用所有的連接數(shù)的狀態(tài),雖然這個插件可以把不活動的連接自動放到連接池里,但是如果連接數(shù)過多,而不及時KILL的話,對網(wǎng)站的連接是有很大的影響的,建議還是手工KILL。
還可以把這個給封閉成一個DB應(yīng)用的類,下一篇就來寫。