如何通过Hibernate的session来彻底关闭数据库连接

如何通过Hibernate的session来彻底关闭数据库连接,第1张

一般是try...catch之后写在finally里面,先判断实现化的session是否显空,如果不为空的话session.close()

比如

finally {

if(session!=null){

session.close()

}

}

楼主因为在hibernate中是Threadlocal管理session的你的session.close()后,Threadlocal的还没有马上请空的,如果你hibernate的session资源不够就很容易产生Too many connections的异常,可以这样解决都可以试试

1添加一个连接池配置文件,增加session线程池的线程数,通过设置

<property name="hibernate.connection.provider_class">

org.hibernate.connection.C3P0ConnectionProvider

</property>

<property name="hibernate.c3p0.max_size">30</property> <——————可以设置大一点

<property name="hibernate.c3p0.min_size">1</property>

<property name="hibernate.c3p0.timeout">1800</property>

<property name="hibernate.c3p0.max_statements">1000</property>

<property name="hibernate.c3p0.idle_test_period">30000</property>

<property name="hibernate.c3p0.acquire_increment">1</property>

<property name="hibernate.c3p0.validate">false</property>

2用楼上的方法,将session.close()修改为:sessionFactory.closeSession(),因为用sessionFactory关闭session会清空ThreadLocal的session

试试吧楼主如果不行,可能还是某一个session的问题

--------------------------------------------

没写对,不好意思是hibernateSessionFactory.closeSession()

_____________________________________________是不是你经常要用到hibernate插入大量数据

是提示out of memory吗

因为hibernate使用缓存插入数据的,当你save时

它只是把数据保存在session中,没有马上插入,所以经常插入大量数据会造成内存不够

______________________________________________-

不过有解决方法的楼主

大兄弟,你这应该是没搞清楚状况吧,

这不是数据库连接关闭了,你是侦听都挂了。

正常来说Session关闭是不会对数据库造成影响,检查Spring,你可能通过Spring在

Session关闭前做了一些别的事情。好好检查一下吧。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9885281.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存