Spring+hibernate数据库连接泄漏问题

 

Spring+hibernate 数据库连接泄漏问题

 

问题发现:

mysql 中用 show processlist 命令查看连接的连接状态。

当访问数据库时,如果发现有 sleep 状态的连接,还在创建的新的连接,说明连接泄漏了。

问题原因 :

spring 托管 hibernate 一般是在 Dao 层使用 HibernateDaoSupport 类与数据库进行同步,如果使用 HibernateDaoSupport 中的 getSession() 方法进行操作,则会导致数据库连接不能释放,如果设置了连接池,连接池就会得不到用完的连接(虽然查看该连接状态是 sleep, 但该连接不会放回到连接池中),多次后,会报连接池满的错误。

getSession() 这个方法本身其实返回的是与当前事务绑定的 Session 对象,在 HibernateDaoSupport 中使用, HibernateDaoSupport 本身是不负责对这个 Session 对象进行关闭的,所以在其中有一个对应的 releaseSession() 方法必须手动操作,用于关闭 Session 

解决方案:

getHibernateTemplate() 方法获得 hibernateTemplate 对象代替 session 对象进行数据库操作。

a)    getHibernateTemplate() .save()/delete() 等常用操作

b)    getHibernateTemplate ().bulkUpdate(sql 语句 ) 执行 sql 语句

c)     hibernate 回调:

                i.          getHibernateTemplete().executeFind()

               ii.          getHibernateTemplete().execute()

      

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值