2017-06-28 30 views
0

从C3P0 documentationc3p0连接或者办理入住或退房手续

对于一些应用,高性能比一个偶然的数据库异常的 风险更重要。在其默认 配置中,c3p0完全不进行连接测试。设置一个 相当长idleConnectionTestPeriod,并在所有的结账 和签入未测试是一个优秀的,高性能的方法。

如果我理解正确的C3P0配置属性的含义,如果数据库成为的短时间内无法再恢复(例如,它重新启动或出现网络问题),如果有一个相当这是在C3P0集中,以便没有连接空闲超过idleConnectionTestPeriod长连接的高使用率,那么所有这些连接都不会被用于有效性和所有试图使用它们将是不成功的测试。基本上,连接池不会自动从数据库不可用性恢复。

在文档中说明这个是一种优秀的高性能方法,但没有警告连接池失去了从无效连接中自动恢复的能力,或者我误解了相关的配置属性?

回答

1

呵呵。我写这个,大概十多年前,你说得对,这不是好建议。原来,在C3P0连接测试往往是非常昂贵的(因为DBMS /驱动程序的独立和完整的有效性测试的确定性,它使用了昂贵的元数据的getTables(...)测试),我强烈建议人们一定要异步测试,在签入和闲置测试。一旦preferredTestQuery,然后jdbc4 Connection.isValid()使可能的高效可靠测试,我修改了文档,以消除同步检查的灰心。但显然这仍然存在,甚至在过去也是一个坏建议。在实践中,如果你不结帐时测试,我建议上签闲置测试,并适度频繁的怠速测试(30秒上下的)两个异步测试通常,减少的可能性的应用程序可以看到陈旧的连接和之前的延迟连接中断后刷新。

我会修改这个前进。谢谢你的收获。