學習筆記,轉自:http://www.oschina.net/question/59889_44927web
數據庫鏈接池的斷開自動重聯、失敗恢復功能顯得很重要,不知道目前主流的數據庫鏈接池:C3P0,Proxool,BoneCP,Druid等支持如何?sql
我知道的:數據庫
Proxool:後端
<!--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>
C3P0:
網絡
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
oracle
重試間隔時間異步
感受 斷開自動重聯 功能比較耗性能,不知道有沒有什麼更好的辦法能夠實現?性能