Spring不对Hibernate原方法操作数据库提供连接关闭服务

前几天我把我之前运用Hibernate+struts1.x框架开发的web项目搬到Spring框架上,其中Hibernate和struts都配置到applicationContext.xml文件上,通过初步测试发现所有线都已经打通了。到今天,我同样是运行该项目,发现一个很诡异的问题就是,当我连续地点击访问数据库的时候,前几次还是没有问题的,但点击多几次就发现项目就死了,所有需要连接数据库的操作的不行了,点其他不用连接数据库的操作还是可以的。同时项目后台并没有报什么错误。一下子就懵逼了,无从下手,因为这个并不是编译或者运行错误。
静下心来细想一下,出现这种现象第一种:中可能性就是出现死循环,但我检查java中并没有死循环(因为就算我点击同一个按钮,调用同一个方法,点击几次之后也会出现这种情况);第二种:就是有线程异步造成死锁的原因,但是就算我加上同步锁还是这样的情况,所以也不是死锁的问题;第三种:就是内存溢出,但如果内存溢出时会报错的,并且就点击几次去连接数据库也不会出现内存溢出。还会是什么问题呢?还有就是这个项目很奇葩的问题就是访问数据库就会出现这种问题,而访问其他的就正常,所以也许是数据库的问题。这时才突然想起如果数据库连接不及时关闭也会出现这种问题,但查看一下Spring的配置,数据源已经配置了关闭。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
 <property name="driverClassName" value="${jdbc.driver}"></property>
 <property name="url" value="${jdbc.url}"></property>
 <property name="username" value="${jdbc.username}"></property>
 <property name="password" value="${jdbc.password}"></property>
 </bean>

还会是什么问题呢?并且一开始就可以访问数据库,说明也不是数据库驱动的问题。想一下还是想去看一下数据库那边有没有及时关闭连接了没(也是一种走投无路的尝试了),我用的是sql server 2014数据库所以用下面的语句查询:

SELECT * FROM  [Master].[dbo].[SYSPROCESSES] WHERE [DBID] IN 
(
  SELECT  [DBID] FROM  [Master].[dbo].[SYSDATABASES]  WHERE  NAME='数据库名'
)    

出现的结果出我意料,竟然所有的数据库连接都sleeping状态
这里写图片描述

这个说明数据库连接并没有及时关闭,所有都是sleeping状态,学过java多线程核心同学的都知道,sleeping没有释放锁,所以其他线程只能等待锁,这个也就是为什么我们点击去访问数据库的操作一直没有反应,同时没有报错,因为后面点击的在等待锁。
我们再回来问题的原点,我们在spring中明明配置了,数据源关闭,但为什么事实上并没有

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值