Последний пакет, успешно отправленный на сервер, был> 70 400 003 миллисекунд назад. длиннее настроенного сервера

У меня ниже исключения

javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException Внутреннее исключение: com.mysql.jdbc.exceptions.jdbc4.Communications Последний пакет, успешно полученный от сервера, был 70 400 002 миллисекунд назад. Последний пакет, успешно отправленный на сервер, был 70 400 003 миллисекунд назад. больше, чем сконфигурированное сервером значение wait_timeout. Чтобы избежать этой проблемы, следует рассмотреть возможность истечения срока действия и / или проверки допустимости соединения перед использованием в приложении, увеличения значений, настроенных сервером для тайм-аутов клиента, или использования свойства соединения Connector/J "autoReconnect=true".

Я провел некоторое исследование и изменил 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>

Последний код выглядел правильно?

Любая помощь будет оценена

1 ответ

Решение

Для начала сделайте тестирование простым, просто используйте

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

вместо проверки простоя соединения. См. Документацию c3p0 по тестированию соединений.

Если проблема не исчезнет, ​​то, скорее всего, проблема не в соединениях, удерживаемых пулом, а в некоторых соединениях или соединениях, которые ваше приложение проверяет и держит открытыми в течение неопределенного периода времени. В идеале, соединения должны быть проверены, использованы, затем сразу же проверены (и надежно, используя попытку с ресурсами или осторожный finally блок).

Другие вопросы по тегам