公司里用的連接池都是自己寫(xiě)好了,封裝起來(lái)的,做大型項(xiàng)目的時(shí)候,非常有用,但近段時(shí)間總是發(fā)現(xiàn)數(shù)據(jù)庫(kù)連接過(guò)多,造成數(shù)據(jù)庫(kù)連接壓力過(guò)大,網(wǎng)站無(wú)法訪問(wèn)等嚴(yán)重后果,我們做的網(wǎng)站主要是用于移動(dòng)公司的后臺(tái),經(jīng)常會(huì)處理很大"群集任務(wù)",找了很長(zhǎng)時(shí)間,發(fā)現(xiàn)是程序里有很多打開(kāi)的連接沒(méi)有關(guān)閉,放回到連接池里去,造成連接數(shù)不夠的問(wèn)題.
后來(lái)上網(wǎng)上找了這個(gè)PROXOOL連接池插件,發(fā)現(xiàn)有自動(dòng)KILL不活動(dòng)的連接的功能.而且有VIEW方式查看連接情況,而且很多數(shù)據(jù)都是配置完成。決定在項(xiàng)目中試驗(yàn)一下。
官方網(wǎng)址:http://proxool.sourceforge.net/ 當(dāng)前版本:proxool-0.9.0RC2
1、下載proxool 地址:http://proxool.sourceforge.net
2、解壓縮proxool-0.9.0RC2.zip,拷貝lib/proxool-0.9.0RC2.jar到web-info/lib 拷貝jdbc驅(qū)動(dòng)到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ù)庫(kù)連接情況。如果運(yùn)行不成功,請(qǐng)刪除本行 -->
<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ù)庫(kù)連接代碼:
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
Connection conn = DriverManager.getConnection("proxool.Develop");
6、利用proxool監(jiān)控工具查看數(shù)據(jù)庫(kù)運(yùn)行狀態(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ù)庫(kù)連接代碼
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
Connection conn = DriverManager.getConnection("proxool.Test");
還有一些配置屬性:
maximum-connection-lifetime 最大連接生命周期 默認(rèn)值:4小時(shí)
maximum-active-time: 最大活動(dòng)時(shí)間 默認(rèn)值:5分鐘
maximum-connection-count 最大連接數(shù) 默認(rèn)值:15個(gè)
minimum-connection-count 最小連接數(shù) 默認(rèn)值:5個(gè)
在用admin調(diào)用的時(shí)候,可以查看這個(gè)WEB應(yīng)用所有的連接數(shù)的狀態(tài),雖然這個(gè)插件可以把不活動(dòng)的連接自動(dòng)放到連接池里,但是如果連接數(shù)過(guò)多,而不及時(shí)KILL的話,對(duì)網(wǎng)站的連接是有很大的影響的,建議還是手工KILL。
還可以把這個(gè)給封閉成一個(gè)DB應(yīng)用的類,下一篇就來(lái)寫(xiě)。
聯(lián)系客服