我在mysql数据库的前面有一个基于Java Spring的Web服务。
我正在使用所有mysql默认设置,所以
wait_timeout=28800
问题是我的Web服务一直在运行,并且需要始终保持有效的数据库连接。
8小时后,如果服务尝试访问数据库,则会得到以下信息:
从服务器成功接收到的最后一个数据包是59,626,614毫秒之前。成功发送到服务器的最后一个数据包是59,626,614毫秒之前。大于服务器配置的“ wait_timeout”值。您应考虑在应用程序中使用连接之前使连接有效性到期和/或对其进行测试,或者增加服务器为客户端超时配置的值,或者使用Connector / J连接属性“ autoReconnect = true”来避免此问题。嵌套的异常是com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功接收到的最后一个数据包是59,626,614毫秒之前。成功发送到服务器的最后一个数据包是59,626,614毫秒之前。大于服务器配置的“ wait_timeout”值。为避免出现此问题,应考虑在应用程序中使用连接之前使其过期和/或对其进行测试,或者增加服务器为客户端超时配置的值,或者使用Connector / J连接属性'autoReconnect = true'。
我最推荐的解决方案是将wait_timeout更改为任意大的数字,这似乎是错误的。
就我所知,mysql的某些内部部分需要有点超时。
其他研究建议添加
autoReconnect=true
连接到我的连接字符串。在我将其挖掘出来之前,这似乎是合理的:
您应该为网络故障编写代码,并自行处理自动重新连接。
有意关闭了自动重新连接的功能,因为当连接断开并恢复为其他状态时,可能会无声地发生几个“应用程序”错误。
无论如何,有评论表明这是一个重复的问题。
来自MySql JDBC timeout even with 'autoReconnect=true'
那么,什么是 确保我没有超时的安全负责的方法?