com.mysql.jdbc.exceptions.jdbc4.CommunicationsException异常解决

项目开发,Tomcat+Mysql,经常在早上刚到公司,第一次访问项目的时候会报以下异常:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException

这是因为Mysql5的连接等待时间(wait_timeout)默认8小时。

我们可以通过以下方法查看你的mysql 的默认连接等待时间是多少:

show global variables like 'wait_timeout';

结果如下:

此查询的时间单位是秒(s)

在wait_timeout时间内,mysql的连接(connection)处于等待状态,一旦超过这个时间,mysql5就会关闭。但是在我们的项目中的连接池中仍存在合法的connection,当你的程序需要再次访问数据库时,就会出现以上异常,但是再重新访问,又能正常从数据库中获取到数据。

这个时间是可以修改的,在windows中最大可设置为24天,需要修改mysql5的安装文件夹中的my.ini文件。

LInux中最大为365天,需要修改/etc/my.cnf文件。文件中添加一行配置:wait_timeout=1814400,(大约21天)重启mysql服务之后生效。

或者可以使用sql修改,但重启之后又会恢复成8小时,因此不推荐此方法:

mysql> set global wait_timeout=1814400;
mysql> show global variables like 'wait_timeout';

但是,即使你修改了时间,系统若长时间不用,一旦超过你设置的时间,再次访问依然会出现上述异常情况。因此,我又找了另一个可以永久解决该问题的办法。

我的解决方法:

方法一:减少连接池内连接的生存周期:

<bean id="dataSource"  class="com.mchange.v2.c3p0.ComboPooledDataSource">       
    <property name="maxIdleTime"value="1800"/>    
    <!--other properties -->    
</bean> 

方法二:定期使用连接池中的连接,使其不失效

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">    
    <property name="preferredTestQuery" value="SELECT 1"/>    
    <property name="idleConnectionTestPeriod" value="18000"/>    
    <property name="testConnectionOnCheckout" value="true"/>    
</bean>  

参考:

https://www.cnblogs.com/ygj0930/p/6405861.html

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值