来自c3p0 文档
对于某些应用程序来说,高性能比偶尔发生数据库异常的风险更重要。在默认配置中,c3p0根本不进行连接测试。设置相当长的
idleConnectionTestPeriod,而不对签出和签入进行测试是一种优秀的、高性能的方法。
如果我正确地理解了c3p0配置属性的含义,如果数据库在短时间内不可用,然后恢复(例如,重新启动或出现网络问题),如果c3p0中汇集的连接的使用率相当高,因此没有任何连接比idleConnectionTestPeriod空闲时间长,那么这些连接中的任何一个都不会被测试有效性,并且所有使用它们的尝试都将失败。基本上,连接池不会从db不可用性中自动恢复。
在文档中,这是一种很好的、高性能的方法,但没有警告说连接池失去了从无效连接中自动恢复的能力,还是我误解了相关配置属性的含义?
发布于 2017-06-29 05:13:16
哈。我写这篇文章,大概是十多年前,你是对的,这不是个好建议。最初,c3p0中的连接测试通常非常昂贵(因为对于dbms/驱动程序独立性和完全有效性测试的确定性,它使用了昂贵的元数据getTables(.),我强烈建议人们确保在签入和空闲测试中进行异步测试。一旦preferredTestQuery和jdbc4 Connection.isValid()使高效可靠的测试成为可能,我就修改了文档以消除同步检查的阻碍。但很明显,这种情况依然存在,即使是在过去的日子里,这也是不好的建议。在实践中,如果您在签出期间没有进行测试,我建议对签入和空闲测试进行异步测试,以及通常情况下适度频繁的空闲测试(30秒-ish),以减少应用程序看到陈旧连接的可能性,以及在中断后重新刷新连接之前的延迟。
我会继续修改这个的。谢谢你的接球。
https://stackoverflow.com/questions/44807078
复制相似问题