许多Apache的项目都支持与关系型数据库进行交互。为每个用户都创建一个连接是一项非常耗时的工作(通常情况下,需要花费几秒中),而为了执行数据库的事务处理可能还需要花费几毫秒。对于一个对外公开访问的互联网应用来说,为每一个用户都开启一个连接是不现实的,因为在任意一个时刻,可能都有大量的用户需要进行访问。因此,开发者希望让当前所有的用户都使用一个连接共享池来进行数据库的访问。一般情况下,在任何时刻请求访问的用户的占比都是很小的(相对于所有的活跃用户来说),而只有在处理请求的时候数据库的连接才是必要的。然后,这个应用登录DBMS,在其内部处理用户的需求。
现在市场上已经有几种数据库连接池可供用户选择,它们有的是Apache的产品,有的不是。Commons包是ASF证书下一个功能丰富的工具包,该包旨在平衡创建和维持连接的之间的效率。
包commons-dbcp 2需要使用底层的对象池机制,该机制需要由包commons-pool 2来提供。
DBCP现在有三个不同的版本,分别对应着不同版本的JDBC。下面是它们的对应关系:
• DBCP 2只能在Java 7下编译和使用(JDBC 4.1)
• DBCP 1.4只能在Java 6下编译和使用(JDBC 4)
• DBCP 1.3只能在Java 1.4-5下编译和使用(JDBC 3)
DBCP 2是基于Commons Pool 2的,和DBCP 1.x相比,其对JMX的支持更好,而且还添加了一些新特性。如果用户想要升级到2.x,需要注意java包的名字已经变了,且Maven也需要进行相应的调整,应为DBCP 2.x与DBCP 1.x是不兼容的。用户还应该清楚的一点是一些配置项(例如maxActive到maxTotal)已经进行了重命名,这是为了和Commons Pool 2里的名字一致。
DBCP 1.4.x和DBCP 1.3.x的代码库是没有什么差别的,除了那些添加到JDBC 4的实现方法已经从DBCP 1.3的源代码中移除出去了。
本文翻译自:http://commons.apache.org/proper/commons-dbcp/