proxool施用详解
最近开发时用到 proxool 数据库连接池框架,这个框架 完全可配置、快速、成熟、健壮。可以透明地为你现存的 JDBC 驱动程序增加连接池功能。
先介绍下什么是 proxool 吧。我也是从网上拷贝的 :
Proxool 是一种Java 数据库连接池技术。是sourceforge 下的一个开源项目, 这个项目提供一个健壮、易用的连接池,最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况。 目前是和DBCP 以及C3P0 一起,最为常见的三种JDBC 连接池技术。 日前,Hibernate 官方宣布由于Bug 太多不再支持DBCP ,而推荐使用 Proxool 或C3P0 。
官网地址: http://proxool.sourceforge.net/ 目前最新版本是:0.9.1 。
现在我们 web 项目
第一步 : 环境配置
我们把 proxool 用的 jar 包和数据库的驱动包拷贝到 WEB-INF/lib 下面。
第二步 : 配置文件配置
我们建一个 proxool.xml 文件,文件名可以随意,不过大家都用这个了,约定俗成吧。配置文件如下,方便以后拷贝使用 :
<? 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 >
<!-- ServletConfigurator: 加载并初始化 proxool.xml 文件 , 因为它是连接数据库的 . 其他很多模块都用到数据 , 所以必须首先加载它 -->
< 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: 数值越小,就会先被加载初始化-->
< 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 a unregistered pool by its alias 'XXX'(XXX 连接池的别名)
网上查了下说是: 连接池的应用本来就是要通过服务器调用的,如果你在java 文件中调用,就没有涉及到服务器,这样就会报错了!
如果你在java 文件中用下面这种方式加载连接池是可用的:
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
Connection conn = DriverManager.getConnection("proxool. 别名:driver:url"," 用户名"," 密码");
试了下确实可以呵。