Spring + Hibernate 整合时数据库连接数过多问题的解决办法

本文描述了在使用Spring + Hibernate整合时遇到的数据库连接数过多导致数据库死锁的问题。问题源于在service层多次通过new ClassPathXmlApplicationContext()创建容器获取DAO,增加了不必要的连接数。为解决此问题,提出了将DAO通过Spring注入到service,并利用单例模式的SingletonBeanCreater获取service,避免在action中直接创建容器,从而降低了服务层与DAO层的耦合,有效减少了数据库连接数。
摘要由CSDN通过智能技术生成

用Spring + Hibernate 整合查询数据库的页面如下所示:

这个图中的页面里,有两个查询,一个是查询节目时刻表,一个是查询频道(图中下方的下拉列表框里的频道就是从数据库查出来的)

每刷新几下该页面,数据库就死掉了,用如下命令查看了连接数,发现连接数很多:

select count(*) from v$session;

经过研究,发现原因如下:

我这个程序中,action层调用service层(业务层),业务层又调用DAO层。

我在每个service里面都去通过new ClassPathXmlApplicationContext() 的方法来取得一个容器,从容器中取得dao,这样调用多少次service就new出多少个容器,就取得多少个dao,连接数自然就大了。

 

解决办法:

将dao通过spring注入给service,而不是在service里面去new一个容器进而得到dao了。这样的话相当于没有领会IOC的精神。

 

那么action里面如何得到service呢?注意也不要去new ClassPathXmlApplicationContext(),写一个单例类,来取得容器。代码如下:

 

package cn.com.pattek.util.utilzx;

import org.springframework.context.ApplicationC

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值