Apache Tomcat 的默認數據庫連接池實現基于的是 Apache Commons 項目的庫,具體來說是這兩個庫:
這兩個庫都位于一個 JAR 文件中:$CATALINA_HOME/lib/tomcat-dbcp.jar。但該文件只包括連接池所需要的類,包名也已經改變了,以避免與應用沖突。
DBCP 2.0 支持 JDBC 4.1。
可參閱 DBCP 文檔了解完整的配置參數。
數據庫連接池創建并管理著一些與數據庫的連接。與打開新的連接相比,回收或重用現有的數據庫連接要更為高效一些。
連接池化還存在一個問題。Web 應用必須明確地關閉 ResultSet、Statement,以及 Connection。假如 Web 應用無法關閉這些資源時,會導致這些資源再也無法被重用,從而造成了數據庫連接池“泄露”。如果再也沒有可用連接時,最終這將導致 Web 應用數據庫連接失敗。
針對該問題,有一個解決辦法:通過配置 Apache Commons DBCP,記錄并恢復這些廢棄的數據庫連接。它不僅能恢復這些連接,而且還能針對打開這些連接而又永遠不關閉它們的代碼生成堆棧跟蹤。
為了配置 DBCP 數據源來移除并回收廢棄的數據庫連接,將下列屬性(一個或全部)添加到你的 DBCP 數據源中的 Resource 配置中:
removeAbandonedOnBorrow=true
removeAbandonedOnMaintenance=true
以上屬性默認都為 false。注意,只有當 timeBetweenEvictionRunsMillis 為正值,從而啟用池維護時,removeAbandonedOnMaintenance 才能生效。關于這些屬性的詳情,可查看 DBCP 文檔 。
使用 removeAbandonedTimeout 屬性設置某個數據庫連接閑置的秒數,超過此時段,即被認為是廢棄連接。
removeAbandonedTimeout="60"
默認的去除廢棄連接的超時為 300 秒。
將 logAbandoned 設為 true,可以讓 DBCP 針對那些拋棄數據庫連接資源的代碼,記錄堆棧跟蹤信息。
logAbandoned="true"
默認為 false。