在公司的项目开发中,我负责数据层接口的代码编写工作,其中,就涉及到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中,同时启动三个同一个测试用例(三个不同的进程);果然,三个测试用例都报了这个警告。为什么呢?因为中间件使用