在 Java 的 JDBC 中会有一个连接池的概念,那么我们来看看常用的连接池有哪些: proxool 、 dbcp 、 c3p0 ,其优劣各有优点不想评价,自己在项目中以 proxool 为主;
那么连接池具体是做什么的呢?其基本思想就是为数据连接建立一个“缓冲池”,而后预先在这个缓冲池中放入一定数量的连接,当需要建立数据库连接的时候,只需要从缓冲池中取出一个即可,使用完之后再放回缓冲池中去。在这个过程中服务启动要相对慢点,但是这相对用户访问时是的请求处理速度来说,替换的是值得的。这里我们还可以设置连接池的最大连接数来防止系统无尽的与数据库建立连接,更重要的是我们可以通过连接池的管理机制监视数据库的连接数量和使用情况,为系统开发、测试及性能调整提供依据;
Ok ,废话少说,以 proxool 为例,来看看 JDBC 中如何加入连接池。
1、 首先要导入“ commons-logging-1.1.jar ”、“ proxool-0.9.1.jar ”、“ proxool-cglib.jar ”;
2、 在 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>proxoolAdmin</servlet-name> <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>proxoolAdmin</servlet-name> <url-pattern>/proxool_admin</url-pattern> </servlet-mapping>
说明:
· <load-on-startup>1</load-on-startup> :这里表示启动是加载;
· proxoolAdmin : proxool 提供的管理监控工具,可查看当前数据库连接情况。如果运行不成功,请删除本行(用 http://localhost/web-name/Admin 访问得到监控结果);
·还有一些其他的属性,但只有特定条件下才会使用,这里就一一列举了。
3、 在 WEB-INF 添加 proxool.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?> <something-else-entirely> <proxool> <alias>db_onlineproject</alias> <driver-url>jdbc:mysql://localhost:3306/db_onlineproject</driver-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <driver-properties> <property name="user" value="root"/> <property name="password" value="123"/> </driver-properties> <maximum-connection-count>100</maximum-connection-count> <minimum-connection-count>10</minimum-connection-count> <trace>true</trace> <house-keeping-test-sql>select 0</house-keeping-test-sql> </proxool> </something-else-entirely>
说明:
· alias :别名
· maximum-connection-count :最大的数据库连接数 .
· minimum-connection-count :最小的数据库连接数 .
· house-keeping-test-sql :这里的 select 0 是为了可以在任意数据库中都可以正常执行,测试连接
Other :
house-keeping-sleep-time: house keeper 保留线程处于睡眠状态的最长时间 ,house keeper 的职责就是检查各个连接的状态 , 并判断是否需要销毁或者创建,这个的默认值是 30 秒。 house-keeping-test-sql: 如果发现了空闲的数据库连接 .house keeper 将会用这个语句来测试 . 这个语句最好非常快的被执行 . 如果没有定义 , 测试过程将会被忽略。 maximum-active-time: 如果 housekeeper 检测到某个线程的活动时间大于这个数值 . 它将会杀掉这个线程 . 所以确认一下你的服务器的带宽 . 然后定一个合适的值 . 默认是 5 分钟。经常有些人或许会遇到正在执行的程序忽然拒绝连接,莫明其妙的程序假死,这些都与这个参数的设置有关,我们大部分数据库操作都会在 5 分钟之内完成,可是偏偏有些可能 5 分钟还完成不了,而这个值如果按照默认值的话,连接池就会不管你到底有没有执行完,都会强行关闭数据库连接,所以这个值你可要小心设置哦:) maximum-connection-count: 最大的数据库连接数 . 一般的大应用设置 30 就足够了。 maximum-connection-lifetime: 一个线程的最大寿命 . minimum-connection-count: 最小的数据库连接数,一般最好事先初始化一部分连接这样,对于初次连接数据库的应用效率比较高,推荐设置 5 - 10 prototype-count: 连接池中可用的连接数量 . 如果当前的连接池中的连接少于这个数值 . 新的连接将被建立 ( 假设没有超过最大可用数 ). 例如 . 我们有 3 个活动连接 2 个可用连接 , 而我们的 prototype-count 是 4, 那么数据库连接池将试图建立另外 2 个连接 . 这和 minimum-connection-count 不同 . minimum-connection-count 把活动的连接也计算在内 .prototype-count 是 spare connections 的数量 . trace: 如果为 true, 那么每个被执行的 SQL 语句将会在执行期被 log 记录 (DEBUG LEVEL). 你也可以注册一个 ConnectionListener ( 参看 ProxoolFacade) 得到这些信息 . |
4、调用
package com.theone.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /** * 建立数据库连接类 * @author xudongwang * */ public class DbUtil { public static Connection getConn() throws SQLException { return DriverManager.getConnection("proxool.db_onlineproject"); } }