休眠不关闭连接

Posted

技术标签:

【中文标题】休眠不关闭连接【英文标题】:Hibernate not closing connection 【发布时间】:2013-09-05 03:55:39 【问题描述】:

我使用 Hibernate + jersey Rest And mysql 作为数据库的后端。在 Hibernate 中使用 cp3 池进行连接,但一段时间后它会创建这么多空闲连接并卡住。我的配置是:

package com.appname.hibernate.util;
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil 
private static SessionFactory sessionFactory;

static 
    try 
        Configuration configuration = new Configuration().configure();

        sessionFactory = configuration.buildSessionFactory();
     catch (HibernateException he) 
        System.err.println("Error creating Session: " + he);
        he.printStackTrace();
        throw new ExceptionInInitializerError(he);
    


public static SessionFactory getSessionFactory() 
    return sessionFactory;


////////////////////// INSIDE DAO ///////////////////////////

private Session getSession() 

SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session;
try 
    session = sessionFactory.getCurrentSession();
 catch (org.hibernate.HibernateException he) 
    session = sessionFactory.openSession();

return session;


public Users regsiterUser(Users users) throws Exception 

Session session = null;

try 
session = getSession();
Transaction transaction = session.beginTransaction();
session.saveOrUpdate(users);
transaction.commit();
return users;

//Using context session that is why I am not closing session
 catch (Exception e)  throw e; 

我从我的控制器中调用这个 DAO 函数,我在 DAO 层内进行事务和会话。请帮帮我,我正在尝试解决这个问题,但没有得到任何解决方案,请看看上面的配置和代码有什么问题......

提前谢谢.....

【问题讨论】:

【参考方案1】:

我认为这个session = sessionFactory.openSession(); 应该在使用后手动关闭,因为它不是由使用后释放资源的编排器管理的。

【讨论】:

因为我正在使用使用上下文会话,这就是我不关闭会话的原因 我不确定,但上下文定义了 getCurrentSession() 合同和仅在提交/回滚时打开/关闭管理(我在这里看不到回滚) 但我正在使用 transaction.commit();在注册完成时。您是否想说在这种情况下我必须在所有 CURD 操作的情况下使用提交? 可以提交,但是回滚呢?不见了 我已经检查过我从未在事务中遇到异常,所以回滚很重要,但即使我遇到问题,我仍然使用回滚..

以上是关于休眠不关闭连接的主要内容,如果未能解决你的问题,请参考以下文章

无法为事务打开休眠会话/无法打开连接 [关闭]

手机wifi反复断开连接

休眠 - 连接太多

ubuntu 笔记本电脑合上后就自动休眠了,怎么改成合上只关闭屏幕?

CentOS禁止自动休眠

如何关闭休眠模式