看起来我们可以通过在org.apache.commons.dbcp2.BasicDataSource上设置testOnBorrow=false
来提高我们的性能。但是有什么风险?通过设置BasicDataSource属性testOnBorrow = false来提高Web应用程序/ rest-api性能,是否有风险?
因此,使用默认值,每次从连接池中检索连接时,都会针对数据库执行验证查询以测试数据库是否有效。虽然该查询可能会很快运行(通常,“select 1”是查询)。它仍然涉及将数据发送到数据库(通常在另一台服务器上)并将结果读回。这需要时间,也许只有50ms,但是,如果没有必要,为什么会这样呢?
为了提高性能,我正在考虑设置testOnBorrow=false, testOnReturn=true, testOnCreate =true, testWhileIdle=true
。而不是默认值。
因此,通过这种设置,看起来风险在于连接可能“变坏”,而您的数据库查询失败。但为什么会发生?特别是对于testOnReturn和testWhileIdle,似乎风险很小。什么可能导致连接在此设置中变坏?
任何事情。从功能角度来看,您必须准备好在任何时候关闭连接而没有明显的原因。这也意味着在借用它时检查连接在功能意义上是无用的。但是从性能角度来看,你必须要问的是:最后一次空闲测试和第一个查询之间的连接可能会下降的可能性有多大?这将取决于很多事情。而且,持续的空闲测试会导致多少开销,而不是每次借用一次。 – biziclop