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

Vat*_*ala 7 java mysql hibernate jdbc

让我来描述我的问题 -

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

javax.persistence.PersistenceException:org.hibernate.exception.JDBCConnectionException - :org.hibernate.exception.JDBCConnectionException:无法打开连接致无法打开连接 - 致:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路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

我从这些异常声明中理解的是,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参数在评论中

小智 5

我之前有过问题.看起来MySQL服务器超时连接.默认情况下,超时为28800,即8小时.有关详细信息,请参阅此链接.

http://shengchien.blogspot.com/2009/10/hibernate-c3p0-and-mysql.html

希望它对你有用.