让我描述一下我的问题-
我有一个Java应用程序- hibernate作为MySQL上的数据库接口层。我在应用程序中收到通信链接失败错误。此错误的发生是非常具体的情况。我收到此错误,当我在无人看管的情况下使mysql服务器超过大约6个小时时(即,当没有查询发送给MySQL的时间超过大约6个小时时)。我将在下面粘贴顶级的“例外”级别描述,并添加一个pastebin链接以获取详细的stacktrace描述。
javax.persistence.PersistenceException:org.hibernate.exception.JDBCConnectionException:无法打开连接- 原因:org.hibernate.exception.JDBCConnectionException:无法打开连接- 原因:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接故障- 从服务器成功接收到的最后一个数据包是1,274,868,181,212毫秒之前。成功发送到服务器的最后一个数据包是在0毫秒之前。-由以下原因引起:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败- 从服务器成功接收到的最后一个数据包是1,274,868,181,212毫秒之前。成功发送到服务器的最后一个数据包是在0毫秒之前。-由以下原因引起:java.net.ConnectException:连接被拒绝:connect
链接到pastebin进行进一步调查的链接-http: //pastebin.com/4KujAmgD
从这些异常语句中我了解到,在一段时间的空闲/无活动之后,MySQL拒绝建立任何连接。我一直在通过Google搜索阅读有关此内容的一些文章,并了解到克服这一问题的一种可能方法是为c3p0属性设置值,因为c3p0与Hibernate捆绑在一起。具体来说,我从这里http://www.mchange.com/projects/c3p0/index.html阅读,设置两个属性idleConnectionTestPeriod和preferredTestQuery将为我解决此问题。但是这些值似乎没有产生作用。
这是解决此问题的正确方法吗?如果没有,解决这个问题的正确方法是什么?
以下是stackoverflow.com上相关的通信链接故障问题,但我在他们的答案中找不到满意的答案。 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications链接失败 如何处理:通信链接失败
注意1-当我连续使用我的应用程序时,我没有收到此错误。注2-我将JPA与Hibernate一起使用,因此我的hibernate.dialect等hibernate属性位于META- INF文件夹的persistence.xml中(这会阻止c3p0属性工作吗?)
编辑-我尝试的c3p0参数在注释中
我以前有问题。看起来MySQL服务器超时了您的连接。超时默认为28800,即8小时。请参阅此链接以获取更多详细信息。
http://shengchien.blogspot.com/2009/10/hibernate-c3p0-and- mysql.html
希望对您有用。