在配置DBCP2池,並且基於documentation我注意到, - 有其被描述爲一種稱爲timeBetweenEvictionRunsMillis
配置:DBCP2 - 當空閒連接從池中刪除
毫秒之間睡覺的數量清除對象的運行 清除線程。如果不肯定,則不會運行空閒對象清除線程 。
其默認值爲-1
。
這是否意味着evictor線程永遠不會在默認配置下運行?那麼如何強制執行配置參數maxIdle
- 如果池的計數大於maxIdle
,則池必須驅除空閒連接。
我似乎很困惑,默認配置是這樣的,空閒連接永遠不會被驅逐。
還有另外一種配置softMiniEvictableIdleTimeMillis
,它似乎在timeBetweenEvictionRunsMillis
上扮演了一些角色。
在這方面的任何澄清將是巨大的幫助。
暫時我正在像下面這樣配置池 - 因爲我的目標是在池中沒有任何閒置連接太久(這是我們使用AWS RDS時所需要的,似乎有a weird issue與它在一起我們經常碰到)
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl(properties.getProperty("app.mysql.url"));
dataSource.setUsername(properties.getProperty("app.mysql.username"));
dataSource.setPassword(properties.getProperty("app.mysql.password"));
dataSource.setMaxIdle(20);
dataSource.setMaxWaitMillis(20000); //wait 10 seconds to get new connection
dataSource.setMaxTotal(200);
dataSource.setMinIdle(0);
dataSource.setInitialSize(10);
dataSource.setTestOnBorrow(true);
dataSource.setValidationQuery("select 1");
dataSource.setValidationQueryTimeout(10); //The value is in seconds
dataSource.setTimeBetweenEvictionRunsMillis(600000); // 10 minutes wait to run evictor process
dataSource.setSoftMinEvictableIdleTimeMillis(600000); // 10 minutes wait to run evictor process
dataSource.setMinEvictableIdleTimeMillis(60000); // 60 seconds to wait before idle connection is evicted
dataSource.setMaxConnLifetimeMillis(600000); // 10 minutes is max life time
dataSource.setNumTestsPerEvictionRun(10);
感謝您的詳細信息。那些在10-20分鐘窗口期間的空閒連接 - 它們是否會被連接池重用?我的猜測是他們會被重用。在你的第二個例子中,當你說'如果空閒時間超過它'...你的意思是它超過10000 + 30000? –
謝謝,我現在閱讀你的編輯。現在很清楚 –
@Wand Marker,不客氣。關於重用連接,如果我正確理解了這個問題,當然如果需要它們,池將重用它們,並且'空閒計時器'將被重置。 –