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。