记一次:c3p0连接池死锁的问题

在项目开发中遇到C3P0连接池死锁问题,表现为多线程环境下启动应用时发出警告。通过模拟并发场景,发现在数据源名称相同的情况下可能导致死锁。解决方案是在数据源名称后添加随机字符以避免冲突,实施后测试成功解决了死锁警告。此外,配置多数据源和单例连接池也可能引发类似问题,需要注意线程安全。
摘要由CSDN通过智能技术生成

       在公司的项目开发中,我负责数据层接口的代码编写工作,其中,就涉及到mysql数据库的查询接口。为提供性能,也使用了C3P0这个连接池技术。配置简单,也好用。这里说一下,我们的使用环境;由于是给中间件层使用,而中间件并没有向web层那样,有配置spring和hibernate,因此,这些查询接口只是使用了c3p0来管理数据库连接。

       和很多网友一样,碰到了死锁的这个问题,信息类似如下:

       WARNING: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@4b9cafa7 -- APPARENT DEADLOCK!!! Complete Status:
          Managed Threads: 3
          Active Threads: 3

        通过中间件的日志发现:中间件多个应用在同时启动时,肯定报这个警告;有两台服务器在凌晨4点左右,几乎同时报这个警告。奇怪的是,貌似业务没有受到影响。之后,在网上查找了很多资料和博客,貌似没用。这里想说的是,解决问题还是要从自身的应用环境出发;在进行测试时,尽量模拟真实的环境,不要只是能用就行。

        既然,中间件多个应用在同时启动时,肯定报这个警告,那就模拟一下。在eclipse中,同时启动三个同一个测试用例(三个不同的进程);果然,三个测试用例都报了这个警告。为什么呢?因为中间件使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值