连接mysql异常Communications link failure

连接mysql 数据库的时候出现这个异常Communications link failure,原因:如果在wait_timeout秒期间内,数据库连接(java.sql.Connection)一直处于等待状态,mysql5就将该连接关闭。这时,你的Java应用的连接池仍然合法地持有该连接的引用。当用该连接来进行数据库操作时,就碰到上述错误。
一般的mysql数据库设置的wait_timeout时间都是8小时,(因为设置太长时间影响性能,因为改大会有返回信息延时的情况,和大量的SLEEP进程无法及时释放的问题),所以还是得从客户端这边解决问题,
网上一般给出的解决办法:
1.mysql5以前的版本可以直接在jdbc连接url的配置中附加上“autoReconnect=true”。
2.将mysql的全局变量wait_timeout的值修改为最大。查看mysql5的手册,发现windows和linux下wait_timeout的最大值分别是24天和365天。
(1).在文件my.ini的最后增加一行:wait_timeout=1814400。(该文件,windows下在mysql的安装目录下,linux下位置为/etc/my.ini)
(2).重启mysql。
还有说把ip改成localhost的,因为我连的数据库不是我自己本地的,所以这种情况也就没有尝试
而且由于数据库是第三方提供的,他们也不给改等待时间
所以只好再想办法。
我的方法就是每次连得时候都去校验有效性,c3p0连接池配置加属性

    <property name="testConnectionOnCheckin"> 
                     <value>true</value> 
	</property> 
    <property name="idleConnectionTestPeriod"> 
                      <value>60</value> 
	</property> 
     <property name="testConnectionOnCheckout"> 
                      <value>true</value> 
	</property> 
    <property name="maxIdleTime"> 
                      <value>28000</value> 
    </property> 

这些属性解析:
testConnectionOnCheckin:如果设为true那么在取得连接的同时将校验连接的有效性。默认为false。
idleConnectionTestPeriod: 连接池每隔60秒自动检测数据库连接情况,如果断开则自动重连。
testConnectionOnCheckout: 因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的时候都
将校验其有效性。
maxIdleTime:最大空闲时间,超过空闲时间的连接将被丢弃。为0或负数则永不丢弃。默认为0;
这个肯定是要设置的<=wait_timeout 了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值