建立一个连接。在连接使用完毕后,不是将其物理连接关闭,而是将其放入池中等待其他
操作复用。
同时连接池内部有机制判断,如果当前的总的连接数少于 miniIdle,则会建立新的空闲连
接,以保证连接数得到 miniIdle。如果当前连接池中某个连接在空闲了
timeBetweenEvictionRunsMillis 时间后任然没有使用,则被物理性的关闭掉。有些数
据库连接的时候有超时限制(mysql 连接在 8 小时后断开),或者由于网络中断等原因,
连接池的连接会出现失效的情况,这时候可以设置一个 testWhileIdle 参数为 true,注意
这里的“while”这个单词应该翻译成“如果”,换句话说 testWhileIdle 写为 testIfIdle 更好
理解些,其含义为连接在获取连接的时候,如果检测到当前连接不活跃的时间超过了
timeBetweenEvictionRunsMillis,则去手动检测一下当前连接的有效性,在保证确实有效
后才加以使用。在检测活跃性时,如果当前的活跃时间大于
minEvictableIdleTimeMillis,则认为需要关闭当前连接。当然,为了保证绝对的可用性,
你也可以使用 testOnBorrow 为 true(即在每次获取 Connection 对象时都检测其可用
性),不过这样会影响性能。
最后说一下 removeAbandoned 参数,其实 druid 是不能检测到当前使用的连接是否发
生了连接泄露,所以在代码内部就假定如果一个连接建立连接的时间很长,则将其认定为
泄露,继而强制将其关闭掉。这个参数在 druid 中默认是不开启的,github 上给出的
wiki 中也对其没有丝毫提及。其实在代码中设置 testWhileIdle 就能在一定程序上消灭掉
泄露的连接,因为如果发生了泄露,那么他的不活跃时间肯定会在某个时间点大于
timeBetweenEvictionRunsMillis,继而被回收掉。
2 代码编写
2.1 使用 spring
首先给出 spring 配置文件
[html]view plain copy
1. <?xmlversion="1.0"encoding="UTF-8"?>
2. <beansxmlns="http://www.springframework.org/schema/beans"
3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4. xsi:schemaLocation="http://www.springframework.org/schema/mvchttp
://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
5. http://www.springframework.org/schema/beanshttp://
www.springframework.org/schema/beans/spring-beans-3.0.xsd
6. http://www.springframework.org/schema/contexthttp://
www.springframework.org/schema/context/spring-context-3.0.xsd">
7. <!--给 web 使用的 spring 文件.-->
8. <beanid="propertyConfigurer"
9. class="org.springframework.beans.factory.config.PropertyPlaceh
olderConfigurer">