數據庫連接池的斷開自動重聯、失敗恢復功能顯得很重要,不知道目前主流的數據庫連接池:C3P0,Proxool,BoneCP,Druid等支持如何?
我知道的:
Proxool:
1
2
3
4
5
6
7
8
9
10
|
<!--proxool 解決與數據庫斷開重連問題(houseKeepingTestSql爲oracle的語法,其他數據庫類似) --> < property
name = "houseKeepingTestSql" >
< value >select 1 from dual</ value >
</ property >
< property
name = "testBeforeUse" >
< value >true</ value >
</ property >
< property
name = "testAfterUse" >
< value >true</ value >
</ property > |
breakAfterAcquireFailure: false
true表示pool向數據庫請求連接失敗後標記整個pool爲block並close,就算後端數據庫恢復正常也不進行重連,客戶端對pool的請求都拒絕掉。false表示不會標記 pool爲block,新的請求都會嘗試去數據庫請求connection。默認爲false。因此,如果想讓數據庫和網絡故障恢復之後,pool能繼續請求正常資源必須把此項配置設爲false
testConnectionOnCheckout: false
true表示在每次從pool內checkout連接的時候測試其有效性,這是個同步操作,因此應用端的每次數據庫調用,都會先通過測試sql測試其有效性,如果連接無效,會關閉此連接並剔除出pool,並嘗試從pool內取其他連接,默認爲false,此特性要慎用,會造成至少多一倍的數據庫調用。
testConnectionOnCheckin: false
true表示每次把連接checkin到pool裏的時候測試其有效性,因爲是個事後操作,所以是異步的,應用端不需要等待測試結果,但同樣會造成至少多一倍的數據庫調用。
idleConnectionTestPeriod: 60
C3P0會有一個Task檢測pool內的連接是否正常,此參數就是Task運行的頻率。默認值爲0,表示不進行檢測。
acquireRetryAttempts: 10
重試次數
acquireRetryDelay: 1000
重試間隔時間
感覺 斷開自動重聯 功能比較耗性能,不知道有沒有什麼更好的辦法可以實現?