Как бороться с: ошибка SQL: 0, состояние SQLState: 08006 и 08003? - PullRequest
0 голосов
/ 25 октября 2019

У меня есть приложение на героку с PostgreSQL db. И парсер, который работает на моем ПК, он сохраняет и читает данные из базы данных heroku каждые 10 минут и использует hibernate для взаимодействия. Вот конфиг:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
        <property name="hibernate.connection.url">jdbc:postgresql:url</property>
        <property name="hibernate.connection.username">user</property>
        <property name="hibernate.connection.password">pass</property>
        <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQL94Dialect</property>
        <property name="show_sql">true</property>

        <property name="hibernate.c3p0.idle_test_period">14400</property><property name="hibernate.c3p0.timeout">25200</property>
        <property name="hibernate.c3p0.max_size">15</property>
        <property name="hibernate.c3p0.min_size">3</property>
        <property name="hibernate.c3p0.max_statements">0</property>
        <property name="hibernate.c3p0.preferredTestQuery">select 1;</property>

    </session-factory>
</hibernate-configuration>

Но через некоторое время мой парсер останавливается, и я получаю это:

окт 25, 2019 12:44:59 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 0, SQLState: 08006
окт 25, 2019 12:44:59 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Ошибка ввода/ввывода при отправке бэкенду
окт 25, 2019 12:44:59 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 0, SQLState: 08003
окт 25, 2019 12:44:59 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Соединение уже было закрыто

Какие есть способы решить эту проблему?

1 Ответ

2 голосов
/ 25 октября 2019

Соединение с вашей базой данных закрывается, и вы проверяете их действительность только каждые 3 часа. По-видимому, простое тестирование не очень хорошая идея .

Если вы не работаете в устаревшей среде, вам следует установить hibernate.c3p0.testconnectiononcheckout=true, чтобы вы всегда получали действительное соединение.

preferredTestQuery также не требуется, если вы работаете с драйвером JDBC4 (и, надеюсь, так и есть).

...