Время ожидания Java Hibernate к базе данных истекло через несколько минут - PullRequest
0 голосов
/ 19 октября 2018

Hibernate теряет соединение с базой данных через несколько минут и отправляет такую ​​ошибку:

org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions WARN:

Ошибка SQL: 0, SQLState: 08S01 paź 18, 2018 23:17:40 PM

org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions ОШИБКА:

Последний пакет успешно получен с серверабыло 363 452 миллисекунды назад.Последний пакет, успешно отправленный на сервер, был 363 493 миллисекунды назад.длиннее, чем сконфигурированное сервером значение 'interactive_timeout'.Чтобы избежать этой проблемы, следует рассмотреть возможность истечения срока действия и / или проверки допустимости соединения перед использованием в приложении, увеличения значений, настроенных сервером для тайм-аутов клиента, или использования свойства соединения Connector / J 'autoReconnect = true'.

Я добавил autoreconnect = true, но он не работал, и ошибка все еще произошла.

Затем я создал DatabaseConnectionController, который имеет следующую функцию:

public static EntityManagerFactory getEntityManagerFactory() {

    if (entityManagerFactory != null && entityManagerFactory.isOpen()) {
        return entityManagerFactory;
    } else {
        return requestNewConnection();
    }
}

Проблема все еще возникла, и яначал искать ответы в гугле, я добавил несколько строк в файл persistance.xml:

<property name="hibernate.dbcp.validationQuery" value="SELECT 1" />
<property name="hibernate.dbcp.testOnBorrow" value="true" />
<property name="hibernate.dbcp.validationInterval" value="60000" />
<property name="hibernate.dbcp.testOnReturn" value="true" />

Это также не решило мою проблему.

Hibernate не переподключается к базе данных автоматическив первый раз он просто отправляет сообщение об ошибке, но при отправке второй запрос автоматически переподключается к базе данных.

Как настроить автоматическое переподключение после отключения или как перехватить эту ошибку и повторить запрос вкод?

1 Ответ

0 голосов
/ 19 октября 2018

Проблема в том, что базы данных сбрасывают неактивные соединения.Как долго может бездействовать соединение, зависит от конфигурации вашей БД.Чтобы это исправить, вам нужно использовать пул соединений, например c3p0.Чтобы использовать его, вам нужно добавить следующие зависимости в ваш Maven.

<!-- c3p0 -->
<!-- Session manager -->
<!-- Check that the version works for you -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-c3p0</artifactId>
    <version>5.2.12.Final</version>
</dependency>

Затем вам нужно добавить следующие конфигурации в ваш файл hibernate.cfg.xml.

<!-- c3p0 -->
<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="hibernate.c3p0.idle_test_period">300</property>
<property name="hibernate.c3p0.timeout">600</property>
<property name="hibernate.c3p0.max_size">25</property>
<property name="hibernate.c3p0.min_size">1</property>
<property name="hibernate.c3p0.max_statement">0</property>
<property name="hibernate.c3p0.acquireRetryAttempts">1</property>
<property name="hibernate.c3p0.acquireRetryDelay">250</property>

Этого должно быть достаточно, чтобы продолжать создавать новые подключения и решать проблемы с подключением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...