1. 程式人生 > >java 資料庫連線的自動回收機制 removeAbandoned

java 資料庫連線的自動回收機制 removeAbandoned

有時粗心的程式編寫者在從連線池中獲取連線使用後忘記了連線的關閉,這樣連池的連線就會逐漸達到maxActive直至連線池無法提供服務。現代連線池一般提供一種“智慧”的檢查,但設定了removeAbandoned="true"時,當連線池連線數到達(getNumIdle() < 2) and (getNumActive() > getMaxActive() - 3)  [空閒的連線小於2並且活動的連線大於(最大連線-3)] 時便會啟動連接回收,那種活動時間超過removeAbandonedTimeout="60"的連線將會被回收,同時如果logAbandoned="true"設定為true,程式在回收連線的同時會列印日誌。removeAbandoned是連線池的高階功能,理論上這中配置不應該出現在實際的生產環境,因為有時應用程式執行長事務,可能這種情況下,會被連線池誤回收,該種配置一般在程式測試階段,為了定位連線洩漏的具體程式碼位置,被開啟。生產環境中連線的關閉應該靠程式自己保證。