c3p0连接池checkoutTimeout

本文分析并解决了一个常见的技术难题:在使用C3P0连接池和Oracle数据库时,长时间运行后程序会出现挂死现象。通过调整C3P0配置参数、优化session管理及确保所有数据库操作正确关闭,最终解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       开始程序执行Hibernate调用数据库查询的时候,隔一段时间会挂死,以至于连接该数据库的所有操作都无法执行。

怀疑是oracle分页查询的问题,网上也确实有说,分页排序需要添加主键或唯一键,不然导致分页重复记录,问题不在这。

优化c3p0配置参数,开始设了最大连接数100(后面发现这是导致为什么程序需要执行一段时间之后才挂死的原因之一),添加<property name="checkoutTimeout">100</property>,即:程序从连接池checkout session的时候
等待100毫秒,超时则抛出异常;后面程序不会出现挂死现象,只是数据库的操作永远不会成功,都是
checkoutTimeout异常。网上很多关于这个问题的说发:

1.c3p0和oracle兼容性不好换proxool;

2.spring的事务管理不能使用;

3. 设置unreturnedConnectionTimeout,使checkout的session超时强行回收。

最后分析得出:应该是最大session数都被用完了,没有正常返回连接池;如果有类似的情况,请检查自己的程序:1.是不是所有调用数据库的操作都session.close();2.使用事务管理的,对所有数据库的操作都注明有@Transactions。程序经过排查后恢复正常。

另外:数据库的session最大连接数5个就够用了,上面设置100无形中给调试增加了难度。
转载自:https://blog.youkuaiyun.com/renshenguo/article/details/44398775

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值