proxool应用详解
?
Proxool是一种Java数据库连接池技术。是sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池,最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况。目前是和DBCP以及C3P0一起,最为常见的三种JDBC连接池技术。 日前,Hibernate官方宣布由于Bug太多不再支持DBCP,而推荐使用Proxool或C3P0。
我们把proxool用的jar包和数据库的驱动包拷贝到WEB-INF/lib下面。
<?xml version="1.0"encoding="UTF-8"?>
??? <something-else-entirely>
?????? <proxool>
?????????? <!--数据源的别名-->
?????????? <alias>dbtest</alias>
?????????? <!--url连接串-->
?????????? <driver-url>
jdbc:oracle:thin:@10.135.6.155:1521:oanet
</driver-url>
?????????? <!--数据库jdbc驱动类-->
?????????? <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
?????????? <driver-properties>
????????????? <!--用户名-->
????????????? <property name="user"value="AMS_TEST" />
????????????? <!--密码-->
????????????? <property name="password"value="1" />
?????????? </driver-properties>
?????????? <!--最大连接数(默认5个),超过了这个连接数,再有请求时,就排在队列中等候,
????????????? 最大的等待请求数由maximum-new-connections决定 -->
?????????? <maximum-connection-count>100</maximum-connection-count>
?????????? <!--最小连接数(默认2个)-->
?????????? <minimum-connection-count>10</minimum-connection-count>
?????????? <!--proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收
???????????????????????? ,超时的销毁 默认30秒-->
?????????? <house-keeping-sleep-time>90000</house-keeping-sleep-time>
?????????? <!--没有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的
???????????????????????? 用户连接就不会被接受-->
?????????? <maximum-new-connections>10</maximum-new-connections>
?????????? <!--最少保持的空闲连接数(默认2个)-->
?????????? <prototype-count>5</prototype-count>
?????????? <!--在使用之前测试-->
?????????? <test-before-use>true</test-before-use>
?????????? <!--用于保持连接的测试语句 -->
?????????? <house-keeping-test-sql>select sysdate from dual</house-keeping-test-sql>
?????? </proxool>
??? </something-else-entirely>
?
可以配置多个something-else-entirely标签来配置多个池。
接下来我们在web.xml中注册proxool,让tomcat启动时就加载proxool配置文件初始化:我们在web.xml文件加入以下配置:
<servlet>
??? <servlet-name>ServletConfigurator</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
??? <init-param>
????? <param-name>xmlFile</param-name>
?????? <!—-配置文件-->
????? <param-value>WEB-INF/proxool.xml</param-value>
</init-param>
??? <load-on-startup>1</load-on-startup>
? </servlet>
? <servlet>
??? <servlet-name>proxool</servlet-name>
??? <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
? </servlet>
? <servlet-mapping>
<servlet-name>proxool</servlet-name>
??? <url-pattern>/proxool</url-pattern>
? </servlet-mapping>
当然你也可以配置受保护域,只让TOMCAT管理员才能查看连接池的信息.
都配置好了。其实proxool提供了很多的配置方式:有properties,xml,java.util.Properties等来配置,配置方式多样化,大家可以参考官方文档.
第三步:测试。
??? 我在java代码中进行测试的时候,就是在java类中写个main方法时,总是会出现: Attempt to refer to aunregistered pool by its alias 'XXX'(XXX连接池的别名)
网上查了下说是: 连接池的应用本来就是要通过服务器调用的,如果你在java文件中调用,就没有涉及到服务器,这样就会报错了!
如果你在java文件中用下面这种方式加载连接池是可用的:
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
Connection conn =DriverManager.getConnection("proxool.别名:driver:url","用户名","密码");
试了下确实可以呵。
?
?