我无法在Postgres 10上以空闲状态终止会话 这在进行一些测试并填充postgres连接拉期间引起了一个很大的问题。 关闭连接后,会话处于空闲状态,不会关闭
我在本地数据库和生产数据库中都遇到相同的问题。 我试图在本地环境中解决此问题(这就是为什么我附加了本地屏幕截图),但是没有任何效果。
我将idle_in_transaction_session_timeout设置为1s,但是会话处于空闲状态,事务中非空闲状态 我在休眠配置中将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>