处理超时的正确方法

时间:2019-10-02 12:43:36

标签: mysql spring-jdbc

我在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'

那么,什么是 确保我没有超时的安全负责的方法?

0 个答案:

没有答案