C3P0死锁问题的解决办法

最近把C3P0拿来作为数据库连接池,起初只连接一个sqlserver,感觉还比较正常,然后又加了一个数据源,是个oracle,问题就开始出现了。经常是每天早上刚上班就莫名其妙的报死锁,或者是等午休结束后刚开始登录使用就报死锁,网上搜了很多贴着,说是c3p0自身的bug,放大连接池数就OK了,随即把maxPoolSize从20调到了100,并把内存也放大了,发现的确有所缓解,但只是缓解,死锁的频率降低了一点,但还是经常会出现。


实在无奈,就继续查资料,无意中发现另一个sqlserver数据库(不是这里提到的c3p0的一个数据源)有这样一条配置:validationQuery="select 1",查了下意思,大概就是说连接长期不使用时,连接池会自动从数据库中断开该连接,等再次使用时再尝试连接,这个语句就是在断开重连时做检测的。感觉意思有那么点像,就搜了下c3p0是否有类似的配置,果然找到了一个:

<property name="preferredTestQuery">
            <value>SELECT 1</value>
</property>

加上该配置后,到目前为止,已经1天半了,一直没有出现问题,后续详情,有待继续观察,但是按照之前的出现概率和场景,这个时候应该是会出现死锁的,至于这个配置的原理,后续慢慢了解,等待继续更新。


附上c3p0配置项的一个帖子:

http://www.blogjava.net/ashutc/archive/2011/03/16/346365.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值