最近公司两个服务都在晚上执行定时任务中途出现同样wait_timeout问题:
org.hibernate.engine.jdbc.spi.SqlExceptionHelper : The last packet successfully receivedfrom the server was 257,760 milliseconds ago. The last packet sent successfully to the server was 257,762 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
在网上查找类似的问题,查找到较为全面的解决方式:关于MySQL的wait_timeout连接超时问题报错解决方案 - zhuzhipeng - 博客园 (cnblogs.com)
关于上述提及的超时问题,我们的服务在三分钟之前已经进行过mysql的连接操作,但是三分钟之后变出现该异常提示。
感觉应该不是这8小时的时长原因。因此具体是什么原因导致的问题出现目前没有分析出来。
我们的暂时处理方式为:
在配置中对mysql增加相关配置信息:
后续:
处理后发现问题没有得到解决。使用第二种处理方式:
url: *****略****&autoReconnect=true
tomcat:
time-between-eviction-runs-millis: 600000
min-evictable-idle-time-millis: 1800000
添加上述三个配置,autoReconnect和tomcat属性,虽然其他参考文章上说auto的配置在mysql5以下适用,但是目前没有找到更好的方式。
添加配置之后,发现接口调用正常了。
因为是生产问题,为了能在本地环境下能进行问题的复现,想了一些办法,但是不想专门去将数据库的wait_timeout时间进行修改,所以尝试进行一下方式进行复现:
1、数据库命令SHOW PROCESSLIST;查出所有进程
2、清空所有相关进程
3、调用接口后,不行刷新1、命令,保证出现新进程就直接删除。
此方法会导致接口报错,查询日志会显示类似问题
在进行配置变更,进行同样方式,查看问题是否不会再出来了。