1

我决定使用DBCP主要是因为我的数据库连接超时。理论上,一旦你定义了一个“验证查询”,DBCP 在使用它之前默认会在连接上运行那个查询,所以你总是知道连接是好的。

我在两周前设置它,它似乎工作。但是,昨晚我在连接上遇到超时异常。

在我的开发机器上,代码在 MySQL 重新启动后没有问题,所以我猜 DBCP正在做某事。

我应该如何继续调查这个?您是否为此目的使用 DBCP?

(刚刚删除了 50 行左右的更多细节,试图保持问题的可读性。如果缺少一些关键信息,请告诉我)。

编辑:我想我应该在开始之前阅读这个问题......

4

1 回答 1

1

这并非总是如此。我遇到了类似的问题,但事实证明 DBCP 有一个没有很好记录的默认行为。

您必须设置驱逐运行之间的时间以清除空闲连接。这可以通过调用 setTimeBetweenEvictionRunsMillis 在 SharedPoolDataSource 对象上进行设置。如果从未设置,则默认值为负数,并且线程永远不会运行!

于 2009-08-18T06:32:28.173 回答