Proxool连接池的使用心得

    技术2022-05-20  34

    先转过来研究研究,以后或许可以用得着。

    公司里用的连接池都是自己写好了,封装起来的,做大型项目的时候,非常有用,但近段时间总是发现数据库连接过多,造成数据库连接压力过大,网站无法访问等 严重后果,我们做的网站主要是用于移动公司的后台,经常会处理很大"群集任务",找了很长时间,发现是程序里有很多打开的连接没有关闭,放回到连接池里 去,造成连接数不够的问题.

                 后来上网上找了这个PROXOOL连接池插件,发现有自动KILL不活动的连接的功能.而且有VIEW方式查看连接情况,而且很多数据都是配置完成。决定在项目中试验一下。

              官方网址:http://proxool.sourceforge.net/    当前版本: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驱动到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提供的管理监控工具,可查看当前数据库连接情况。如果运行不成功,请删除本行 --><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、在调用数据库连接代码:       Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");       Connection conn = DriverManager.getConnection("proxool.Develop");      6、利用proxool监控工具查看数据库运行状态。地址:./admin

           以上配置是采用的XML文件方式,也可以采用properties配置方式:

    proxool.alias=Testproxool.driver-class=oracle.jdbc.driver.OracleDriverproxool.driver-url=jdbc:oracle:thin:@192.168.10.160:1521:orclproxool.user=testproxool.password=testpassproxool.maximum-connection-count=20proxool.prototype-count=4proxool.house-keeping-test-sql=select sysdate from DUALproxool.verbose=trueproxool.statistics=10s,1m,1dproxool.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>

    在调用数据库连接代码    Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");   Connection conn = DriverManager.getConnection("proxool.Test");

    还有一些配置属性:maximum-connection-lifetime   最大连接生命周期 默认值:4小时maximum-active-time:      最大活动时间    默认值:5分钟maximum-connection-count    最大连接数     默认值:15个minimum-connection-count    最小连接数     默认值:5个

    在用admin调用的时候,可以查看这个WEB应用所有的连接数的状态,虽然这个插件可以把不活动的连接自动放到连接池里,但是如果连接数过多,而不及时KILL的话,对网站的连接是有很大的影响的,建议还是手工KILL。注意:一般连接用完应关闭连接,对于执行时间比较长的操作,maximum-active-time的值要设大一些,不然时间到了,连接池会将连接关闭, 导致数据库操作出错。对于连续的统计任务,使用数据库连接可以在一小时以上,应考虑自动关闭的情况,加上事务处理,并重新建立连接。

    本文来自博客,转载请标明出处:http://blog.csdn.net/kuyesuifeng/archive/2009/12/24/5068668.aspx


    最新回复(0)