日期:2014-05-16  浏览次数:20643 次

C3P0,Proxool,BoneCP,Druid等连接池的断开自动重联功能

数据库连接池的断开自动重联、失败恢复功能显得很重要,不知道目前主流的数据库连接池:C3P0,Proxool,BoneCP,Druid等支持如何?

我知道的:

Proxool:

<!--proxool 解决与数据库断开重连问题(houseKeepingTestSql为oracle的语法,其他数据库类似) -->??
<property name="houseKeepingTestSql">???????????????????????????????????????????????????????
<value>select 1 from dual</value>???????????????????????????????????????????????????????????
</property>?????????????????????????????????????????????????????????????????????????????????
<property name="testBeforeUse">?????????????????????????????????????????????????????????????
<value>true</value>?????????????????????????????????????????????????????????????????????????
</property>?????????????????????????????????????????????????????????????????????????????????
<property name="testAfterUse">??????????????????????????????????????????????????????????????
? <value>true</value>???????????????????????????????????????????????????????????????????????
</property>?????????????????????????????????????????????????????????????????????????????????

?

C3P0:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"?? destroy-method="close">
???????? <property name="driverClass" value="${dataSourceforSe.driverClassName}" />
???????? <property name="jdbcUrl" value="${dataSourceforSe.url}"/>???????????
???????? <property name="user" value="${dataSourceforSe.username}"/>
???????? <property name="password" value="${dataSourceforSe.password}"/>
???????? <property name="minPoolSize" value="2"/>
???????? <property name="maxPoolSize" value="20"/>
???????? <property name="maxIdleTime" value="1800"/>
???????? <property name="acquireIncrement" value="2"/>
???????? <property name="maxStatements" value="0"/>
???????? <property name="initialPoolSize" value="3"/>
???????? <property name="idleConnectionTestPeriod" value="240"/>
???????? <property name="acquireRetryAttempts" value="10"/>
???????? <property name="breakAfterAcquireFailure" value="false"/>??? <!-- 网络故障恢复之后,pool能继续请求设为false -->
???????? <property name="testConnectionOnCheckout" value="true"/>
??? </bean>

breakAfterAcquireFailure: false
? ? ? ? true表示pool向数据库请求连接失败后标记整个pool为block并close,就算后端数据库恢复正常也不进行重连,客户端对pool的请求都拒绝掉。false表示不会标记 ? pool为block,新的请求都会尝试去数据库请求connection。默认为false。因此,如果想让数据库和网络故障恢复之后,pool能继续请求正常资源必须把此项配置设为false ?
testConnectionOnCheckout: false
? ? ? ? ?true表示在每次从pool内checkout连接的时候测试其有效性,这是个同步操作,因此应用端的每次数据库调用,都会先通过测试sql测试其有 效性,如果连接无效,会关闭此连接并剔除出pool,并尝试从pool内取其他连接,默认为false,此特性要慎用,会造成至少多一倍的数据库调用。 ?
testConnectionOnCheckin: false
? ? ? ?true表示每次把连接checkin到pool里的时候测试其有效性,因为是个事后操作,所以是异步的,应用端不需要等待测试结果,但同样会造成至少多一倍的数据库调用。 ?
idleConnectionTestPeriod: 60