因为数据库频繁的建立、关闭连接,会极大的减低系统的性能,所以很多系统需要利用数据库连接池来提高这方面性能。
数据库连接池的原理是,开始就在内存中开辟一块空间(集合),先往池子里面放置多个连接对象。后面需要连接的话,直接从池子里面取,不需要自己创建连接。使用完毕之后归还连接确保连接对象能循环利用。
1、Tomcat JDBC
tomcat-jdbc.jar连接池 org.apache.tomcat.jdbc.pool 是 Apache Commons DBCP 连接池的一种替换或备选方案。
支持高并发环境与多核/CPU 系统。
接口的动态实现。支持 java.sql 与 java.sql 接口(只要 JDBC 驱动)。
验证间隔时间。我们不必每次使用单个连接时都进行验证,可以在借出或归还连接时进行验证,只要不低于我们所设定的间隔时间就行。
只执行一次查询。当与数据库建立起连接时,只执行一次的可配置查询。
能够配置自定义拦截器。
极其简单。核心只有 8 个文件,连接池本身则大约只有这个数目的一半。
异步连接获取。可将连接请求队列化。
更好地处理空闲连接。
可以控制连接应被废弃的时间:当池满了即废弃,或者指定一个池使用容差值,发生超时就进行废弃处理。
通过查询或语句来重置废弃连接计时器。
经过指定时间后,关闭连接。
当连接要被释放时,获取 JMX 通知并记录所有日志。
可以通过 java.sql.Driver、javax.sql.DataSource 或 javax.sql.XADataSource 获取连接。通过 dataSource 与 dataSourceJNDI 属性实现这一点。
支持 XA 连接。
2、Commons-DBCP
使用Commons-DBCP需要使用commons-dbpc.jar、commons-collections.jar、commons-pool.jar 。
1.x是单线程。在分配对象或对象返回的时候,会锁定全部连接池。 (不适用于2.x)
1.x在逻辑cpu数量增加或者并发线程增加时,性能可能会变的很慢。高并发系统受到的影响会更加明显(不适用于2.x )
拥有60多个类。
使用静态接口,需要对应的jre需要对应的DBCP 版本,否则会抛出 NoSuchMethodException异常。
没有自动回收空闲连接的功能。
提供最大连接数,如果超过最大连接数,就会断开所有连接。
不提供连接池监控。
3、Tomcat-DBCP
Tomcat-DBCP与Commons-DBCP相似, tomcat-dbcp.jar 包不用再依赖pool.jar包。
支持jndi的方式注册绑定。
4、Druid
Druid是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况。
强大的监控特性,通过Druid提供的监控功能,可以清楚知道连接池和SQL的工作情况。
a. 监控SQL的执行时间、ResultSet持有时间、返回行数、更新行数、错误次数、错误堆栈信息;
b. SQL执行的耗时区间分布;
c. 监控连接池的物理连接创建和销毁次数、逻辑连接的申请和关闭次数、非空等待次数、PSCache命中率等。
方便扩展。提供了Filter-Chain模式的扩展API,可以自己编写Filter拦截JDBC中的任何方法,可以在上面做任何事情,比如说性能监控、SQL审计、用户名密码加密、日志等等。
集合了开源和商业数据库连接池的优秀特性。
5、BoneCP
BoneCP 是一个快速、免费而且开源的java数据库连接池(JDBC Pool)管理工具库。BoneCP在快速这个特点上做到了极致,官方数据是C3P0等的25倍左右。
有自动回收空闲连接功能。
提供最大空闲时间,如果连接时间超过最大连接时间,就会断开当前连接。
高度可扩展, 快速的连接池。
a. 不用synchronized 关键字来处理多线程对资源的争用,而是使用 java.util.concurrent 包中的锁机制;
b. 首次使用分区机制来分开管理数据库连接;
利用分区技术提高性能。
允许直接访问一个连接或者语句。
智能调整连接池大小。
SQL语句缓存支持。
支持异步获取数据库连接 。
通过释放连接助理进程来释放数据库连接,提高性能。
支持数据库热切换。
自动重试失败的数据库操作(当数据库或者网络挂掉的时候) 。
延迟初始化能力。
自动检测连接可用性。
JMX support
允许直接通过数据源而不是通过驱动来获取一个新的数据库连接。
通过initSQL参数在每次获取连接的时候执行SQL 。
Debug支持准确地高亮那些已经得到但是还没有关闭的链接。
Debug支持展示那些被关闭两次的链接地址堆栈信息。
6、Proxool
Proxool是一种Java数据库连接池技术。sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池。
提供连接池监控。
快速,成熟,健壮。
完全可配置。
可以非常简单的移植到现存的代码中。
7、C3P0
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
有自动回收空闲连接功能。
提供最大空闲时间,如果连接时间超过最大连接时间,就会断开当前连接。
不提供连接池监控。
8、DBPool
DBPool是一个高效、易配置的数据库连接池。它除了支持连接池应有的功能之外,还包括了一个对象池,使用户能够开发一个满足自己需求的数据库连接池。
9、XAPool
XAPool是一个XA数据库连接池。它实现了javax.sql.XADataSource并提供了连接池工具。
jotm实现分布式事务需要用XAPool连接池。(推荐用Atomkis代替jotm)
10、Primrose
Primrose是一个Java开发的数据库连接池。当前支持的容器包括Tomcat4&5、Resin3与JBoss3。它同样也有一个独立的版本,可以在应用程序中使用而不必运行在容器中。Primrose通过一个WEB接口来控制SQL处理的追踪、配置,以及动态池管理。在重负荷的情况下可进行连接请求队列处理。
11、SmartPool
SmartPool是一个连接池组件,它模仿应用服务器对象池的特性。SmartPool能够解决一些临界问题如连接泄漏(connection leaks)、连接阻塞、打开的JDBC对象(如Statements、PreparedStatements)等。
支持多个pool
自动关闭相关联的JDBC对象
在所设定time-outs之后察觉连接泄漏
追踪连接使用情况
强制启用最近最少用到的连接
把SmartPool“包装”成现存的一个pool
12、DDConnectionBroker
DDConnectionBroker是一个简单,轻量级的数据库连接池。
13、MiniConnectionPoolManager
MiniConnectionPoolManager是一个轻量级JDBC数据库连接池。它只需要Java1.5(或更高)并且没有依赖第三方包。
【 推荐 】:
Tomcat JDBC
Druid
BoneCP
Proxool
C3P0