即使使用'autoReconnect = true',MySql JDBC 也会超时 [重复]

Posted

技术标签:

【中文标题】即使使用\'autoReconnect = true\',MySql JDBC 也会超时 [重复]【英文标题】:MySql JDBC timeout even with 'autoReconnect=true' [duplicate]即使使用'autoReconnect = true',MySql JDBC 也会超时 [重复] 【发布时间】:2012-03-12 20:17:40 【问题描述】:

有时,我的 Java/Tomcat6/Debian Squeeze 应用程序无法与 mysql 服务器通信。 Tomcat 应用程序位于前端服务器上,而 MySql 位于单独的仅 MySql 的盒子上。一个典型的错误是:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was56588 milliseconds ago.

The last packet sent successfully to the server was 56588 milliseconds ago, which 
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.

给出的超时时间只有60秒,看起来很短。如果是一个小时或更长时间,我会简单地设置一个后台任务来每隔几分钟 ping 数据库服务器。我在打开的 URL 中添加了 autoReconnect 参数,没有明显的影响。

知道这里的问题是什么吗? 谢谢 帕特

【问题讨论】:

看到这个帖子***.com/q/667289/778687 @tusar,感谢您的链接。解释了为什么我有很多代码要写。有趣的是他们正在弃用自动重新连接。 服务器上的 wait_timeout 设置为什么? 【参考方案1】:

您应该为网络故障编写代码并自行处理自动重新连接。

自动重新连接被故意关闭,因为当连接消失并以不同状态返回时,可能会静默发生一些“应用程序”错误。

无论如何,评论表明这有点重复问题。

【讨论】:

【参考方案2】:

配置 c3p0 属性以解决此问题。使用类似的属性,

hibernate.connection.provider_class=org.hibernate.connection.C3P0ConnectionProvider
hibernate.c3p0.min_size=0
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=500
hibernate.c3p0.max_statements=50
hibernate.c3p0.idle_test_period=3000
hibernate.c3p0.testConnectionOnCheckout=true
hibernate.c3p0.acquire_increment=1

带有 JDBC 连接 URL url=jdbc:mysql://host/databasename?autoReconnect=true

【讨论】:

autoReconnect 已弃用且不推荐使用(请参阅Connector/J reference 中的属性描述或故障排除章节section 15.4 末尾的注释),因为至少2004。跨度>

以上是关于即使使用'autoReconnect = true',MySql JDBC 也会超时 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

jdbc autoReconnect=true 参数设置导致 slow log 爆表。

'autoreconnect=true'设置无效,怎么解决

连接数据库超时设置autoReconnect=true,默认重试次数调整

连接数据库超时设置autoReconnect=true,默认重试次数调整

mysql5 数据库连接丢失问题,autoReconnect=true不起作用

连接数据库超时设置autoReconnect=true