#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>