Java c3p0连接池,不进行签入或签出测试

Java c3p0连接池,不进行签入或签出测试,java,database,database-connection,connection-pooling,c3p0,Java,Database,Database Connection,Connection Pooling,C3p0,从c3p0: 对于某些应用程序,高性能比 偶尔出现数据库异常的风险。默认情况下 配置,c3p0根本不进行连接测试。设定 相当长的idleConnectionTestPeriod,并且没有在签出时进行测试 而签入是一种优秀的、高性能的方法 如果我正确理解c3p0配置属性的含义,如果数据库在短时间内不可用,然后恢复(例如重新启动或出现网络问题),如果c3p0中汇集的连接使用率相当高,因此没有连接空闲时间超过idleConnectionTestPeriod,则这些连接都不会进行有效性测试,所有使用它们

从c3p0:

对于某些应用程序,高性能比 偶尔出现数据库异常的风险。默认情况下 配置,c3p0根本不进行连接测试。设定 相当长的
idleConnectionTestPeriod
,并且没有在签出时进行测试 而签入是一种优秀的、高性能的方法

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


是文档中的错误措辞说明这是一种优秀、高性能的方法,没有警告连接池失去从无效连接自动恢复的能力,还是我误解了相关配置属性的含义。我写过,大概十多年前,你是对的,这不是一个好建议。最初,c3p0中的连接测试通常非常昂贵(因为对于dbms/驱动程序独立性和完全有效性测试的确定性,它使用了昂贵的元数据getTables(…)测试),我强烈建议人们确保在签入和空闲测试中进行异步测试。一旦
preferredTestQuery
和jdbc4 Connection.isValid()使高效可靠的测试成为可能,我修改了文档,以消除同步检查的阻碍。但很明显,这种情况一直存在,即使在过去,这也是一个糟糕的建议。在实践中,如果您在签出期间没有进行测试,我建议对签入和空闲测试进行异步测试,并通常进行中等频率的空闲测试(30秒),以降低应用程序发现陈旧连接的可能性以及中断后刷新连接之前的延迟

我会继续修改这个。谢谢你的帮助