C3P0连接池的断开自动重联功能

问题背景

Java后台日志发现Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure的错误,查了下,发现是mysql连接超时断开,而连接池还以为链接正常时报的错误;

解决方案

1、延长空闲超时时间

set global wait_timeout=604800;

set global interactive_timeout=604800;

这两个参数分别都设置为604800秒即7天;

2、添加连接池对数据库连接的状态检测动作(有降低一定性能)

<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>

在原有配置上添加三个选项

<property name="breakAfterAcquireFailure" value="false"/>
<property name="idleConnectionTestPeriod" value="180"/>
<property name="acquireRetryAttempts" value="10"/>

 breakAfterAcquireFailure: false 
        true表示pool向数据库请求连接失败后标记整个pool为block并close,就算后端数据库恢复正常也不进行重连,客户端对pool的请求都拒绝掉。false表示不会标记   pool为block,新的请求都会尝试去数据库请求connection。默认为false。因此,如果想让数据库和网络故障恢复之后,pool能继续请求正常资源必须把此项配置设为false   

 idleConnectionTestPeriod: 60 
       C3P0会有一个Task检测pool内的连接是否正常,此参数就是Task运行的频率。默认值为0,表示不进行检测。 

 acquireRetryAttempts: 10
       重试次数 
Copyright © 2017 ITGATHER.COM - 闽ICP备19016859号-1
扫二维码--> 返回顶部