2014-03-27 29 views
7

我想配置我的c3p0連接池,以便至少有2個連接總是處於活動狀態,最多5個連接,並且空閒連接超過前2個連接池將在合理的時間內(例如一個小時)過期。max1dleTimeExcessConnections與c3p0中的maxIdleTime有什麼不同?

這一切聽起來很直接,但文檔似乎暗示功能maxIdleTimemaxIdleTimeExcessConnections之間沒有區別,這使我感到困惑。

Basic pool configuration狀態:

在了MinPoolSize和maxPoolSize之間的範圍內,連接在一個池的數量而變化,根據使用模式。每當用戶請求連接時,連接數就會增加,沒有可用的連接,並且該池尚未達到受管連接數量中的maxPoolSize。由於連接採集非常緩慢,因此批量增加連接數量幾乎總是有用的,而不是強制每個客戶端等待新的連接以在負載增加時引發單個採集。 acquireIncrement確定c3p0池在連接池用完時嘗試獲取的連接數。 (不論acquireIncrement,游泳池絕不允許maxPoolSize被超過。)

而且minPoolSize用法:連接池將保持在任何特定時間的

最小數量。

好的,太好了。並用於配置連接時間:

maxIdleTimeExcessConnections是關於在池未處於裝載狀態時將c3p0池所持有的連接數最小化。默認情況下,c3p0池在負載下增長,但只有在連接失敗時才縮小連接測試或通過上述參數過期。一些用戶希望他們的池可以在使用量激增之後快速釋放不必要的連接,從而強制使用大型池。您可以通過將maxIdleTimeExcessConnections設置爲比maxIdleTime短得多的值來實現此目的,如果連接超出您設定的最小大小,則如果它們閒置的時間超過一小段時間,就會被釋放。

所以暗示minPoolSize只有在與maxIdleTimeExcessConnections一起使用時才重要,否則只會被完全忽略。

確證爲maxIdleTime文檔隻字不提minPoolSize

秒的連接可以被丟棄之前保持彙集但未被使用。零意味着空閒連接永不過期。

而且maxIdleTimeExcessConnections是有道理的:

的是超過了MinPoolSize的連接應允許被淘汰之前在池中保持空閒的秒數。適用於希望大大減少開放連接數的應用程序,如果在尖峯之後負載級別降低並且不再需要獲取連接,則將池縮回到minPoolSize。如果設置了maxIdleTime,如果該參數有任何作用,則maxIdleTimeExcessConnections應該更小。零意味着沒有強制執行,多餘的連接不會被閒置。

我覺得很奇怪minPoolSize是一個基本的功能,它只在與我看來是一個更高級的功能一起使用時才起作用。這是否正確?

回答

0

由史蒂夫Walkdman很好的回答,我只是想添加一個簡短的回答:

不同的是,maxIdleTime甚至會在minPoolSize -d池更換空閒連接,而maxIdleTimeExcessConnections不會。

+0

嗨,Oleninikov,'替換空閒連接'和'休息空閒連接','替換空閒連接'意味着創建一個新的連接對象,並刪除舊的?當打破空閒連接時,連接池的數量會減少一個?提前致謝。 – Javy

相關問題