我决定使用DBCP主要是因为我的数据库连接超时。理论上,一旦定义了“验证查询”,DBCP默认会在使用之前在连接上运行该查询,因此您始终知道连接正常。
我在两周前设置它似乎工作。但是,昨晚我在连接上遇到超时异常。
在我的开发机器上,代码在没有问题的情况下重启MySQL,所以我猜DBCP 正在做某事。
我该如何进行调查呢?你是否为此目的使用DBCP?
(刚刚删除50行左右的更多细节,试图让问题保持可读性。如果缺少一些关键信息,请告诉我。)
编辑:猜猜我在开始之前应该阅读this question ...
答案 0 :(得分:1)
这并非总是如此。我遇到了类似的问题,但结果证明DBCP的默认行为没有很好的记录。
您必须设置逐出运行之间的时间以清除空闲连接。这可以通过调用setTimeBetweenEvictionRunsMillis在SharedPoolDataSource对象上设置。如果从未设置过,则默认值为负,并且线程永远不会运行!