+ -
当前位置:首页 → 问答吧 → SSH DBCP通过session获取connection使用jdbc进行查询,连接不释放

SSH DBCP通过session获取connection使用jdbc进行查询,连接不释放

时间:2011-10-13

来源:互联网

请教一下,项目中使用spring+hibernate+struts,有个比较复杂的查询用了jdbc,网上很多资料都是说最后不用关闭连接,但是经过测试循环一百次就报错了,无法再创建数据库连接,请问到底为什么

作者: sizhu_java   发布时间: 2011-10-13

jdbc还是JdbcTemplate,若是后者是不需要的

作者: wangxf_8341   发布时间: 2011-10-13

是不是DBCP连接池的最大连接配小了。

作者: wingson_shen   发布时间: 2011-10-13

我的applicationContext.xml数据源配置如下:
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://192.168.34.19:3306/TFKSys</value>
</property>
<property name="username">
<value>teamu</value>
</property>
<property name="password">
<value>1111</value>
</property>
<property name="initialSize">
<value>10</value>
</property>
<property name="maxActive">
<value>100</value>
</property>
<property name="maxIdle">
<value>10</value>
</property>
<property name="maxWait">
<value>1000</value>
</property>

<property name="testWhileIdle">
<value>true</value>
</property>
<property name="removeAbandoned" value="true"/> 
  <property name="removeAbandonedTimeout" value="120"/> 

</bean>
我觉得最大连接100个很正常不算小了,mysql连接到达135个左右就报too many connection错误了。我让程序执行一百次jdbc查询,刚好循环到100的时候就报错了,说无法获取connection,基本可以确定通过getSession().connection()获取的connection如果不使用connection.close()的话就释放不了,而且还要session.close(),如果是在HibernateCallback里面是不需要的,但是如果通过connection.close()强制执行关闭的话,那用数据连接池干嘛,所以想请教下在这种情况下connection应该怎么处理,在HibernateCallback里面到底hibernate有没执行connection.close()操作,谢谢。

作者: sizhu_java   发布时间: 2011-10-15