2017-08-09 57 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 –