在解决这个问题之前,我们需要了解两个参数:
- wait_timeout: 访问等待一个周期时长,比如这个wait_timeout默认是8个小时,如果两次访问的时间差大于这个值,就会报连接超时的错误。这个是mysql设置的一个connection的空闲时间,超过这个时间,mysql就会主动断了这个connection,而连接池并不知道该connection以及失效,如果这时Client请求connection,DBCP将该失效的connection提供给client,将会造成异常。
- interactive_timeout: 服务器关闭交互式连接前等待活动的秒数。
在线程启动时,根据全局wait_timeout或全局interactive_timeout值初始化会话wait_timeout值。
- 打开mysql控制台,输入: show variables like ‘%timeout%’,查看和连接时间有关的MYSQL系统变量。
2.解决办法
①:在连接数据库时添加上autoReconnect=true使得连接自动恢复。(有时无效)
②:
set global interactive_timeout=31536000;(值看情况)
show variables like '%timeout%';
注:当只改wait_timeout是不能改interactive_timeout,但若只改interactive_timeout, wait_timeout也会跟着改。