c3p0 配置
hibernate
连接池
hibernate.connection.provider_class=net.sf.hibernate.connection.C3P0ConnectionProvider
c3p0.minPoolSize=3
c3p0.maxPoolSize=15
c3p0.timeout=5000获取连接的等待时间
c3p0.maxIdleTime=1800连接的过期时间
c3p0.max_statements=100
c3p0.idle_test_period=3000每隔3000s测试连接是否可以正常使用
c3p0.acquire_increment=2
c3p0.validate=true</property>每次连接验证连接是否可用
使用c3p0连接池设置,你将就有数据库异常状态恢复功能,但哪并不以为着你将再也不用看到一个异常了。一个数据库会话中的失效的连接将
被中断,如:假如要取出一个已经被取出的连接,或者假如他们在从池中取出时连接测试不正常,那么这个连接将被中断,并且你将在抛出的
异常中看到被中断的连接。
使用c3p0 使获得一个无效的连接的可能性非常小。避免获得无效连接最有效的方法是设置hibernate.c3p0.validate属性为true(在 hibernate
应用中所以那些使用c3p0的应用将使用c3p0-native属性c3p0.testConnectionOnCheckout)。假如你设置 hibernate.c3p0.validate属性为true
,c3p0在获得连接时优先测试连接,在数据库重启后你的应用决不会获得一个无效的连接,除非在数据库关闭时你已经获得有连接。
有一个减少可靠性,提示性能的方法,但啦有能付出巨大代价,方法是设置c3p0.testConnectionsOnCheckin和 hibernate.c3p0.idle_test_per
iod(c3p0-native
c3p0.idleConnectionTestPeriod)为一个较小的值,在这种方案中所有连接测试是异步的,你必须保证那些在你设置的 idle_test_period的时
间段类没有能够被测试的连接不能被取出。因此,假如在一个非常短的时间内连接被取出,那么你从连接池中获得的连接不一定是有效的。
还有一个方案,我推荐设置 c3p0属性文件中的缺省连接测试为"c3p0.preferredTestQuery" 或 "c3p0.automaticTestTable",但它通常比较慢