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()操作,谢谢。
<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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28