Спящий режим не закрывает сеанс ожидания

#postgresql-10 #hibernate

#postgresql-10 #спящий режим

Вопрос:

Я не могу завершить сеанс в состоянии ожидания в postgres 10, это вызвало очень большую проблему во время некоторого тестирования и заполнения запроса на подключение postgres. После завершения соединения сеанс находится в состоянии ожидания и не закрывается введите описание изображения здесь

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

Я установил idle_in_transaction_session_timeout равным 1 с, но сеанс находится в режиме ожидания, не в режиме ожидания в транзакции Я установил connection.pool_size в конфигурации гибернации равным 2, но соединение не является частью пула

Как я могу эффективно уничтожить сеанс ожидания, избегая блокировки базы данных.

Это моя конфигурация спящего режима

     <property name="hibernate.enable_lazy_load_no_trans">true</property>
    <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
    <property name="show_sql">false</property>
    <property name="format_sql">false</property>
    <property name="use_sql_comments">false</property>
    <property name="hibernate.generate_statistics">false</property>
    <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
    <property name="current_session_context_class">thread</property>
  

это пример открытия и закрытия сеанса

     public UserEntity getUserById(String id) {
    Session session = null;
    UserEntity user = null;
    try {
        session =  Connection.getInstance().openSession();
        String s = id.toLowerCase();
        user = session.get(UserEntity.class, s);
    } catch (Exception e) {
        Logging.log(e);
    } finally {
        session.close();
    }
    return user;
}
  

И это метод getIstance

 public static SessionFactory sessionFactory = null;

private static AppConfig appConfig =  (AppConfig) ContextLoader.getCurrentWebApplicationContext().getBean("app");

private Connection(){ }

public static SessionFactory getInstance() {
    try {
        if (sessionFactory == null) {
            sessionFactory = new Configuration().configure(appConfig.getDb().getFile()).buildSessionFactory();
        }
        return sessionFactory;
    }catch (Throwable ex) {
        // Make sure you log the exception, as it might be swallowed
        System.err.println("Initial SessionFactory creation failed."   ex);
        throw new ExceptionInInitializerError(ex);
    }
}
  

Версия базы данных: postgresql 10.5
Версия спящего режима: 5.3.7
Версия Tomcat: 8.0.33

ОБНОВЛЕНИЕ — УСТРАНЕНО

 <property name="hibernate.dbcp.maxIdle">4</property>
  

Комментарии:

1. похоже, проблема в режиме выпуска… посмотрите на docs.jboss.org/hibernate/stable/core.old/reference/en/html /…

Ответ №1:

Следует использовать эту опцию

 <property name="hibernate.dbcp.maxIdle">4</property>