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