有时,我的Java / Tomcat6 / Debian Squeeze应用程序无法与MySql服务器通信。 Tomcat应用程序位于前端服务器上,而MySql位于单独的MySql-only框中。典型的错误是:
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一次数据库服务器。我已将autoReconnect参数添加到开始URL,没有明显的影响。
有什么问题在这里吗? 谢谢 专利
答案 0 :(得分:0)
您应编写网络故障代码并自行处理自动重新连接。
自动重新连接是故意关闭的,因为当连接消失并返回不同的状态时,可能会无声地发生多个“应用程序”错误。
无论如何,评论显示这有点重复。
答案 1 :(得分:0)
配置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