解决java项目长时间未向mysql发送请求而导致连接断开的问题

今天发现在写的一个项目打开时时不时会报错,错误信息大致如下:

在这里插入图片描述
​​

​​The last packet successfully received from the server was 9,291,267 milliseconds ago. The last packet sent successfully to the server was 9,291,324 milliseconds ago.

但是每次重启Tomcat后问题又会消失,因此觉得是连接超时导致的断开。

经查询资料得知,mysql中有一个连接超时时间的概念,查询得数据库的连接超时时间为28800秒,即为8小时。

查询方法:

在MySQL得控制台下输入:

SHOW VARIABLES;

在获取到的数据得最后一行即为连接超时时间,

wait_timeout 28800

如果单位是秒,也就是 8 个小时。
程序最后一次建立连接完毕之后 8 个小时,
Mysql 单方面关闭了这个连接。


查了很多资料,解决方法大致分为两种:

1、将数据库的连接超时时间设置大一点

打开mysql控制台,输入两行
代码如下:

msyql> set global wait_timeout=1814400;
msyql> set global interactive_timeout=1814400;

将数据库的连接超时时间改大,但是这样做治标不治本。





2、在spring配置文件中增加一个bean,设置c3p0每隔多长时间自动检测与数据库的连接,并在断开后重连

bean的代码如下:

<bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>

<property name="driverClass" value="${jdbc.driverClass}"></property>

<property name="user" value="${jdbc.user}"></property>

<property name="password" value="${jdbc.password}"></property>

<!--下面两个属性就是设置c3p0隔28800秒自动检测与数据库的连接(28800也是mysql的默认的连接超时时间)--!>

<property name="testConnectionOnCheckin" value="true"></property>

<property name="idleConnectionTestPeriod" value="28800"></property>

</bean>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值