基于Hibernate的Java Servlet应用程序中的Hibernate Communications Link失败,由MySQL提供支持

让我来描述我的问题 –

我有一个Java应用程序–Hibernate作为MySQL上的数据库接口层。 我的应用程序中出现通信链接失败错误。 出现此错误是一种非常具体的情况。 我得到这个错误,当我让mysql服务器无人值守超过大约6个小时(即没有向MySQL发出超过大约6小时的查询)。 我正在粘贴下面的顶级“exception”级别描述,并为详细的堆栈跟踪描述添加了一个pastebin链接。

javax.persistence.PersistenceException:org.hibernate.exception.JDBCConnectionException:无法打开连接 – 引起:org.hibernate.exception.JDBCConnectionException:无法打开连接 – 引起:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure – 从服务器成功收到的最后一个数据包是1,274,868,181,212毫秒之前。 成功发送到服务器的最后一个数据包是0毫秒前。 – 引起:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障 – 从服务器成功收到的最后一个数据包是1,274,868,181,212毫秒前。 成功发送到服务器的最后一个数据包是0毫秒前。 – 引起:java.net.ConnectException:连接被拒绝:连接

链接到pastebin进行进一步调查 – http://pastebin.com/4KujAmgD

我从这些exception声明中理解的是,MySQL在一段空闲/零活动后拒绝接受任何连接。 我已经通过谷歌搜索阅读了一些相关信息,并且知道克服这一点的一种可能方法是设置c3p0属性的值,因为c3p0与Hibernate捆绑在一起。 具体来说,我从这里读到http://www.mchange.com/projects/c3p0/index.html ,设置两个属性idleConnectionTestPeriod和preferredTestQuery将为我解决这个问题。 但这些价值似乎没有产生影响。

这是解决这个问题的正确方法吗? 如果没有,什么是克服这个的正确方法?

以下是stackoverflow.com上的相关Communications Link Failure问题,但我在答案中找不到满意的答案。 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障 如何处理:通信链路故障

注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

希望它对你有用。

即使我遇到了这个错误,只有在c3p0配置中启用autoReconnect = true后才能解决

jdbc:mysql://localhost:3306/ex_app?autoReconnect=true 

我用c3p0解决了通信链路故障。 我看到下面的博客解释说org.hibernate版本必须等于c3p0版本,所以这是pom配置让我的一天

  org.hibernate hibernate-core 4.3.6.Final   org.hibernate hibernate-entitymanager 4.3.1.Final   org.hibernate hibernate-c3p0 4.3.6.Final   c3p0 c3p0 0.9.1.2  

就像他解释的那样,只需要在hibernate.cfg.xml中添加一个属性即可获得c3p0池

  10 

不再有“通信链接错误”,“预计读取5个字节,读取0”之后。 这是链接: https : //howtodoinjava.com/hibernate/hibernate-c3p0-connection-pool-configuration-tutorial/