一、为什么要用连接池
每次操作数据库,需要先获取连接(socket通道),频繁的操作会不断地获取连接,获取连接的时间可能还大于sql执行时间,重复的这样操作,效率很低;
连接池说白了,就是提前创建好多个连接,当执行数据库操作就拿一个连接直接用,用完再放回去,不需要创建连接的时间;
二、连接池有那些框架
1.DBCP (Database Connection Pool)
是一个依赖Jakarta commons-pool对象池机制的数据库连接池,Tomcat的数据源使用的就是DBCP。目前 DBCP 有两个版本分别是 1.3 和 1.4。1.3 版本对应的是 JDK 1.4-1.5 和 JDBC 3,而1.4 版本对应 JDK 1.6 和 JDBC 4。因此在选择版本的时候要看看你用的是什么 JDK 版本了,功能上倒是没有什么区别。
2.C3P0
是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。
3.Proxool
是一个Java SQL Driver驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中。完全可配置。快速,成熟,健壮。可以透明地为你现存的JDBC驱动程序增加连接池功能
4.BoneCP
是一个开源的快速的 JDBC 连接池。BoneCP很小,只有四十几K(运行时需要log4j和Google Collections的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。另外个人觉得 BoneCP 有个缺点是,JDBC驱动的加载是在连接池之外的,这样在一些应用服务器的配置上就不够灵活。当然,体积小并不是 BoneCP 优秀的原因,BoneCP 到底有什么突出的地方呢,请看看性能测试报告。
5.Druid
druid为阿里巴巴的数据源,(数据库连接池),集合了c3p0、dbcp、proxool等连接池的优点,还加入了日志监控,有效的监控DB池连接和SQL的执行情况。
- HikariCP
快速,简单,可靠。HikariCP是“零开销”生产就绪的JDBC连接池。库大约为130Kb;
Springboot2.0后默认HikariCP连接池;
各种数据库连接池性能对比
Druid是性能最好的数据库连接池,tomcat-jdbc和druid性能接近。
proxool在激烈并发时会抛异常,完全不靠谱。
c3p0和proxool都相当慢,慢到影响sql执行效率的地步。
bonecp性能并不优越,采用LinkedTransferQueue并没有能够获得性能提升
HikariCP追求性能,Druid追求监控,各有好处