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

本文针对Java后台日志中出现的MySQL连接超时问题,提供了延长空闲超时时间和添加连接池状态检测的解决方案。通过调整MySQL的wait_timeout和interactive_timeout参数,并在C3P0连接池中增加breakAfterAcquireFailure、idleConnectionTestPeriod和acquireRetryAttempts配置,确保数据库连接稳定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题背景

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
       重试次数 

查看原文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值