1

我正在使用Apache Commons Pool 2,我已经将配置设置testWhileIdle为true,这意味着Pool框架将检查它们是否有效的空闲对象。

我会问是否定期进行此检查,如果是,默认间隔是多少,以及如何更改它。

我这样问是因为池中的对象应该定期连接到服务器以保持活动状态,我认为池的validateObject方法是实现这一点的好地方。

根据@user7294900 的评论,有两个配置参数:

  1. timeBetweenEvictionRunsMillis, 默认值为 -1
  2. minEvictableIdleTimeMillis, 默认值为 1800*60*30

我有以下两个问题:

  1. 这两个参数有什么区别?
  2. 我将它们都设置为5000,并且池中有8个对象,我在我的PooledObjectFactory的validateObject方法中打印了对象的哈希码,我发现只打印了3个对象的哈希码,然后再没有打印更多消息,看起来validateObject不是每 5 秒调用一次,或者调用validateObject被卡住了?

我发现问题了,请看评论

4

1 回答 1

2

您可以使用 \updatetimeBetweenEvictionRunsMillis更改空闲验证的时间,请参阅Tomcat JDBC 连接池

timeBetweenEvictionRunsMillis (int) 空闲连接验证/清理线程运行之间休眠的毫秒数。此值不应设置在 1 秒以下。它决定了我们检查空闲连接、放弃连接的频率,以及验证空闲连接的频率。默认值为 5000(5 秒)。

于 2017-08-09T10:18:25.557 回答