c3p0 连接池,无需在签入或签出时进行测试

c3p0 connection pool without testing on either check-in or check-out

来自 c3p0 documentation:

For some applications, high performance is more important than the risk of an occasional database exception. In its default configuration, c3p0 does no Connection testing at all. Setting a fairly long idleConnectionTestPeriod, and not testing on checkout and check-in at all is an excellent, high-performance approach.

如果我正确理解c3p0配置属性的含义,如果数据库短时间不可用然后恢复(例如重新启动或出现网络问题),并且如果有相当高的使用在 c3p0 中汇集的连接,以便没有连接的空闲时间超过 idleConnectionTestPeriod,然后将对这些连接中的 none 进行有效性测试,并且所有使用它们的尝试都将失败。基本上,连接池不会从数据库不可用中自动恢复。

文档中的措辞不当表明此 是一种出色的高性能方法 没有警告连接池失去从无效中自动恢复的能力connections,还是我理解错了相关配置属性的意思?

嗯。我写的,大概十多年前,你是对的,这不是好建议。最初,c3p0 中的连接测试通常非常昂贵(因为 dbms/driver 完全有效性测试的独立性和确定性,它使用昂贵的元数据 getTables(...) 测试),我强烈建议人们确保在签入和空闲测试中异步测试。一旦 preferredTestQuery 和 jdbc4 Connection.isValid() 使高效可靠的测试成为可能,我修改了文档以消除同步检查的阻碍。但显然这仍然存在,即使在过去,这也是一个糟糕的建议。实际上,如果您不在结帐期间进行测试,我建议对签入 空闲测试进行异步测试,并通常适度频繁地进行空闲测试(30 秒左右),以减少出现错误的可能性应用程序看到陈旧的连接和中断后连接刷新之前的延迟。

以后我会对此进行修改。谢谢抓捕。