似乎我们可以通过在org.apache.commons.dbcp2.BasicDataSource上设置testOnBorrow=false
来提高性能。但风险是什么?
default setting是真的。
因此,使用默认值,每次从连接池检索连接时,都会对db执行验证查询以测试它是否有效。虽然该查询可以快速运行(通常“选择1”是查询)。它仍然涉及将数据发送到db(通常在另一台服务器上)并读回结果。这需要时间,也许只需要50毫秒,但是,如果没有必要,为什么还要招致?
为了提高性能,我正在考虑设置testOnBorrow=false, testOnReturn=true, testOnCreate =true, testWhileIdle=true
。而不是默认值。
因此,使用此设置似乎风险是连接可能“变坏”并且您的数据库查询失败。但为什么会这样呢?特别是对于testOnReturn和testWhileIdle,风险似乎很小。什么可能导致连接在此设置中变坏?
答案 0 :(得分:1)
请注意,正确性和性能都是理想的属性。在实践中,陈旧的连接是真正关注的问题,我们经常需要与DBA /系统管理员联系以获得帮助。正如您所暗示的那样,连接损坏不应该发生,但确实会因网络状况而发生。
使用验证查询有助于快速识别损坏的连接并将其从池中丢弃。这最终将允许将新的连接对象添加到池中。这种自动恢复过程非常适合IMO。