我有一个与MySQL DB交互的Java Web应用程序。我从不关闭数据库连接,我使用单例来处理连接实例。
问题是,在我保持连接打开太长时间后,我尝试对应用程序执行某些操作,我收到此错误:
The last packet successfully received from the server was 211,710,369 milliseconds ago. The last packet sent successfully to the server was 211,710,398 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.
知道如何制作autoReconnect=true
?或者为什么会这样?我虽然默认会自动重新连接。或者我应该在每次请求后继续关闭数据库吗?这是降低性能,这对于这个应用程序至关重要。
我可以提供更多信息吗?
答案 0 :(得分:2)
虽然您不应该让连接打开那么久但是要回答有关autoReconnect的问题。它可以在连接URL中设置一个属性,例如像
url="jdbc:mysql://localhost:3306/confluence?autoReconnect=true"
答案 1 :(得分:0)
使用以下方法保持连接活动
首先将它用于mysql连接
jdbc:mysql://localhost/<database>?autoReconnect=true
使用验证查询可以长时间保持非活动连接的连接。
在springboot应用程序中,您可以通过在配置中添加以下内容来完成此操作
datasource.primary.testWhileIdle=true
datasource.primary.timeBetweenEvictionRunsMillis=10000
datasource.primary.validationQuery=SELECT 1
datasource.primary.testOnBorrow=true