hibernate运行一段时候后出现假死现象

hibernate运行一段时候后出现假死现象

最近在维护一个外包遗留下的Hibernate+spring+springmvc的一个项目,发现该项目运行一段时间后,发现APP请求后一直处于等待状态,直到请求超时,于是调试跟踪了一下,发现是操作数据库时一直没有返回,刚开始以为是数据库连接超时,但是后来想想,连接超时应该会报异常呀,而这个是没有报任何异常,程序走到执行SQL语句时就不往下走了,停了,出现假死现象一直没有返回,于是断定可能是操作数据库后连接没有关闭导致数据库连接池满了,但是后来查看代码,发现时DAO继承的是spring的HibernateDaoSupport,所以应该session的关闭都归spring来集中管理,代码不需要手动关闭,郁闷了一段时间,确定再去仔细看了DAO里面的代码,这次发现了一个很有问题的操作,代码里面直接用this.getSession()来操作数据而且没有手动关闭该session,而不是通过this.getHibernateTemplate().getSessionFactory().openSession()来操作数据库,后来查了一下发现如果用this.getSession()是需要手动关闭session的.于是,我在每次this.getSession(),操作数据库后把session关闭,运行了很久后,再也没有出现假死现象了。

相关推荐