来自c3p0 documentation:
对于某些应用,高性能比重要性更重要 偶尔出现数据库异常的风险。在默认情况下 配置,c3p0根本没有连接测试。设置一个 相当长的
idleConnectionTestPeriod
,而不是在结账时测试 并且办理登机手续是一种出色的高性能方法。
如果我正确理解了c3p0配置属性的含义,如果数据库在短时间内变得不可用,然后恢复(例如重新启动或出现网络问题),并且如果有相当高的使用率在c3p0中汇集的连接使得没有连接空闲的时间长于idleConnectionTestPeriod
,那么这些连接都不会被测试有效性,并且所有使用它们的尝试都将失败。基本上,连接池不会自动从db不可用性中恢复。
文档中的措辞是否只是说明是一种优秀的高性能方法而没有警告连接池失去从无效连接中自动恢复的能力,或者我有误解了相关配置属性的含义?
答案 0 :(得分:2)
咦。我写的,可能十多年前,你是对的,这不是好建议。最初,c3p0中的连接测试通常非常昂贵(因为对于dbms /驱动程序独立性和完整有效性测试的确定性,它使用了昂贵的元数据getTables(...)测试),我强烈建议人们确保异步测试,在签到和空闲测试中。一旦preferredTestQuery
然后jdbc4 Connection.isValid()可以进行高效可靠的测试,我修改了文档以消除同步检查的挫折。但显然这仍然存在,即使在过去,这也是不好的建议。实际上,如果您在结账时没有进行测试,我建议在checkin 和空闲测试中进行异步测试,并且通常进行适度频繁的空闲测试(30秒-ah),以降低应用程序看到过时的可能性连接在中断后刷新连接之前的延迟。
我会继续修改这个。谢谢你。