tomcat-dbcp vs commons-dbcp

这两个连接池库之间似乎存在很多混淆。我想知道的是哪一个更好(如果有的话)?

以下是我想提出的一些要点...有人可以验证吗?

  1. Tomcat DBCP:使用默认的 tomcat-dbcp.jar该函数将出现在您的 tomcat/lib 目录中。您的 web-inf/lib 中不需要 commons-dbcp.jar 或 commons-pool.jar 库。DB 驱动程序应放在 tomcat/lib 中。

  2. Tomcat DBCP datasource class 是 。共享资源 DBCP 数据源类是 。org.apache.tomcat.dbcp.dbcp.BasicDataSourceorg.apache.commons.dbcp.BasicDataSource

  3. 这两者之间的唯一区别可以在这篇博客中找到。不知道信息是否正确。

  4. 官方的Tomcat文档清楚地提到,大多数类刚刚被重新命名和重新打包。

所以问题是:使用哪一个,哪一个更好


答案 1

Tomcat DBCP只是Apache Commons DBCP的重命名版本,还有一个不同的内部包名称前缀。

在构建时,Tomcat 获取 Commons DBCP 源代码(版本取决于 Tomcat 版本,例如 Tomcat 7.0.27 使用 Commons DBCP 1.4),并进行包名称替换 (-> ) 并将结果构建为 。org.apache.commonsorg.apache.tomcat.dbcptomcat-dbcp.jar

这样做是为了使内部Tomcat JDBC池永远不会与Commons DBCP类的可能应用程序使用发生冲突。这避免了许多潜在的类装入问题。

编辑:“dbcp”包是关于数据源管理的。对于纯池实现,Commons DBCP依赖于Commons Pool(包),但在Tomcat中,池的实现被Tomcat自己的JDBC池(包)所取代。org.apache.commons.poolorg.apache.tomcat.jdbc.pool


答案 2

这两个连接池库之间似乎存在很多混淆。我想知道的是哪一个更好(如果有的话)?

TL/DR:这些是相同的,不要使用它们中的任何一个。

Tomcat-dbcp是Tomcat发行版中包含的apache共享资源池的原始重新打包。为了避免类冲突,软件包已重命名为 org.apache.tomcat.dbcp.dbcp.dbcp。*

在Tomcat 7中(从2011年7月的7.0.19开始),默认的Tomcat软件包中包含了一个额外的连接池(作为tomcat-jdbc.jar的一部分),作为过时的apache共享资源实现的替代方案,称为“The Tomcat JDBC Connection Pool”:

https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html

本文介绍了两者之间的差异:

http://vigilbose.blogspot.com/2009/03/apache-commons-dbcp-and-tomcat-jdbc.html

简短总结为什么新的雄猫池更好:

  • 积极支持
  • 更小,更容易理解和维护(如果你关心查看源代码)
  • 支持所有commons-dbcp功能+添加超级有用的功能,如“initSQL”,“validationInterval”,“jdbcInterceptors”等

推荐