最后一个成功发送到服务器的数据包是在 > 70,400,003 毫秒之前。比配置的服务器长

The last packet sent successfully to the server was > 70,400,003 milliseconds ago. is longer than the server configured

我有以下异常

javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 70,400,002 milliseconds ago. The last packet sent successfully to the server was 70,400,003 milliseconds ago. 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.

我做了一些研究并将 persistance.xml 改成了这个

最新

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="unicorn" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>com.rh.xxx</class>
    <properties>
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
      <property name="hibernate.connection.url" value="jdbc:mysql://xxx:3306/unicorndb?zeroDateTimeBehavior=convertToNull"/>
      <property name="hibernate.connection.password" value="xxx"/>
      <property name="hibernate.connection.username" value="student"/>
      <property name="hibernate.c3p0.max_size" value="100" />  <!--max number of JDBC connections -->
      <property name="hibernate.c3p0.min_size" value="10" />   <!--minimum number of JDBC connections-->
      <property name="hibernate.c3p0.idle_test_period" value="500" />
      <property name="hibernate.c3p0.acquire_increment" value="1" />
    </properties>
  </persistence-unit>
</persistence>

最新代码看起来正确吗?

如有任何帮助,我们将不胜感激

首先,保持测试简单,只需使用

<property name="hibernate.c3p0.testConnectionOnCheckout" value="true" />

而不是空闲连接检查。请参阅 Connection testing

上的 c3p0 文档

如果问题仍然存在,那么问题不太可能出在池中的连接上,而是您的应用程序正在检出并无限期保持打开状态的某个或多个连接。理想情况下,连接应该被签出、使用,然后立即签入(并且稳健地使用 try-with-resources 或小心的 finally 块)。