最近常有数据库和网络设备升级和搬迁等事情,而各个应用都是基于数据库连接池做的,大部分都是基于C3P0,数据库或网络状况的变动都会导致客户端连接池中的connection失效,如何剔除这些blocked connection就和C3P0的各个配置息息相关。这两天,搭了个实验环境,根据C3P0的配置说明 和实验结果,把C3P0关于这块的机制解析了一番。先看看我的结论:
1)C3P0容错和自动重连与以下配置参数有关:
- breakAfterAcquireFailure :true表示pool向数据库请求连接失败后标记整个pool为block并close,就算后端数据库恢复正常也不进行重连,客户端对pool的请求都拒绝掉。false表示不会标记 pool为block,新的请求都会尝试去数据库请求connection。默认为false。因此,如果想让数据库和网络故障恢复之后,pool能继续请求正常资源必须把此项配置设为false
- idleConnectionTestPeriod :C3P0会有一个Task检测pool内的连接是否正常,此参数就是Task运行的频率。默认值为0,表示不进行检测。

本文详细研究了C3P0在面对数据库或网络故障时的容错和自动重连特性,重点探讨了配置参数如breakAfterAcquireFailure、idleConnectionTestPeriod等的作用。推荐配置包括breakAfterAcquireFailure设为false,以及合理设置idleConnectionTestPeriod以确保连接有效性。尽管如此,100%保证getConnection无误还需应用端自定义容错和重试机制。
最低0.47元/天 解锁文章
420

被折叠的 条评论
为什么被折叠?



