2017-08-09 54 views
1

我使用Apache Commons Pool 2,我已将配置testWhileIdle设置为true,这意味着Pool框架将检查它们是否有效的空闲对象。什么时间间隔来验证Apache Commons Pool中的空闲对象2

我会问是否发生这种周期性的检查,如果是这样,什么是默认的时间间隔,以及如何我可以改变它。

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

每@ user7294900的评论中,有两个配置参数:

  1. timeBetweenEvictionRunsMillis,默认值是-1
  2. minEvictableIdleTimeMillis,默认值是1800 *我有以下60 * 30

两个问题:

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

我想通了这个问题,请查看评论

回答

1

可以使用改变空闲验证时间\更新timeBetweenEvictionRunsMillis,看到Tomcat JDBC Connection Pool

timeBetweenEvictionRunsMillis(INT)毫秒至 睡眠空闲连接验证/清洁线的运行之间的数。 此值不应设置在1秒以下。它决定了我们所多久 检查空闲,废弃的连接,以及多久我们验证空闲 连接。默认值是5000(5秒)。

+0

感谢@ user7294900为你回答,我每次更新您的意见,我的问题,你可以请大家看看? – Tom

+0

对不起,我想通了这个问题...'timeBetweenEvictionRunsMillis'是安排任务,以验证对象的间隔,而'minEvictableIdleTimeMillis'是从pool.Since被驱逐的两个参数是相同的空闲时间,似乎逐出胜利 – Tom

+0

minEvictableIdleTimeMillis的默认值为1000 * 60 * 30 –