spring+hibernate配置c3p0无法释放数据库连接
弄了3天,还是没有搞定。
配置:
winxp+tomcat5.0.28+hibernate3.1+spring1.2.6+struts1.0+mysql5.0.17,做了一个小blog。没有配置连接池时,运转良好。用c3p0配置后,每次都会出现3或者5个新连接。然后发现数据库连接不能释放。出现很多sleep连接。直到全部连接占满。
出现:错误表现:
类似的问题,但没有都没有很好的解决方法。
而且可以用Jprofire检测到c3p0包的使用情况:
。当用户增加多时,数据库最大的连接数增到20后,连接数不再增加。
而且可以用Jprofire检测到c3p0包的使用情况:
。当用户增加多时,数据库最大的连接数增到20后,连接数不再增加。
写一个测试用的页面,每秒刷新N次。。。
之后再看。。。内存。。。
如果还长。。。那就是缓存的问题了。。。
如果不长。。。再看代码也来的急。。。。代码想要看一遍会死人的。<property name="driverClass">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="jdbcUrl">
<value>jdbc:mysql://localhost/auction</value>
</property>
<property name="user">
<value>root</value>
</property>
<property name="password">
<value>123456</value>
</property>
<property name="maxPoolSize">
<value>40</value>
</property>
<property name="minPoolSize">
<value>1</value>
</property>
<property name="initialPoolSize">
<value>1</value>
</property>
<property name="maxIdleTime">
<value>20</value>
</property>
</bean>
<!--定义了Hibernate的SessionFactory -->
<bean id="sessionFactory" name="sessionFactory"/></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">${hibernate.dialect}</prop><prop key="hibernate.show_sql">${hibernate.show_sql}</prop><prop key="hibernate.autoReconnect">${hibernate.autoReconnect}</prop><prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop><prop key="hibernate.cache.use_query_cache">true</prop><prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop></props></property><property name="mappingResources"><list><value>Role.hbm.xml</value></list></property></bean> 16 楼 tom.duan 2007-09-12 <property name="maxStatements">100</property> ,这个属性有什么用?直接去掉好了……
然后尝试一下把<prop key="hibernate.c3p0.idle_test_period">120</prop>属性设置小一些,例如30,让更短的时间检查空连接,以便释放。
<prop key="hibernate.c3p0.acquire_increment">2</prop>,值可否设置大一些? 17 楼 zhaosong 2007-09-12 问一下用过c3p0的同志:
这个c3p0连接池在运行中,如果和数据库的网络连接断开过几分钟恢复连接,这个连接池是否还可以正常工作。如果可以正常工作,那么多长时间后就不能正常运行了,可以设定吗?
18 楼 tom.duan 2007-09-13 zhaosong 写道问一下用过c3p0的同志:
这个c3p0连接池在运行中,如果和数据库的网络连接断开过几分钟恢复连接,这个连接池是否还可以正常工作。如果可以正常工作,那么多长时间后就不能正常运行了,可以设定吗?
可以正常使用的,但是正在执行的事务会被终止,并抛出一个异常…… 19 楼 zhaosong 2007-09-14 谢谢tom.duan
检测连接是否可用,是直接发送一个简单数据库请求来检测的,还是有什么更好的方法吗?
另外有推荐的连接池的 ---优秀的数据库连接分配机制--- 吗?
我看了一下c3p0的代码,因为层次太复杂,时间比较少所以没看出具体算法,希望能同过少量代码反映优秀连接分配算法的。不胜感激!!!(以前写的一个不太理想) 20 楼 tom.duan 2007-09-18 zhaosong 写道谢谢tom.duan
检测连接是否可用,是直接发送一个简单数据库请求来检测的,还是有什么更好的方法吗?
另外有推荐的连接池的 ---优秀的数据库连接分配机制--- 吗?
我看了一下c3p0的代码,因为层次太复杂,时间比较少所以没看出具体算法,希望能同过少量代码反映优秀连接分配算法的。不胜感激!!!(以前写的一个不太理想)
这里有一个大大写的c3p0的详细配置说明,http://msq.iteye.com/blog/60387,上面对各个属性的作用说的比较详细,有几个性能相关的属性你试一下,希望对你有些帮助。
c3p0详细的代码我也只是看过一点,暂时没有什么好的建议,有时间的话研究一下,再探讨。 21 楼 antonyup_2006 2007-10-19 看了有启发!