Hibernate不会关闭空闲会话

时间:2019-03-21 14:19:59

标签: postgresql-10 hibernate

我无法在Postgres 10上以空闲状态终止会话 这在进行一些测试并填充postgres连接拉期间引起了一个很大的问题。 关闭连接后,会话处于空闲状态,不会关闭 enter image description here

我在本地数据库和生产数据库中都遇到相同的问题。 我试图在本地环境中解决此问题(这就是为什么我附加了本地屏幕截图),但是没有任何效果。

我将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>

0 个答案:

没有答案