1.连接池
池化思想是在计算机软件研发中常用的一种思想;该思想为建立一组序列,用于存放各种数据结构,从而对各种数据结构进行管理。池化的优点为:让数据结构有序化和处于控制,从而方便管理。池化本质是一种数学思想,常见的数学池如:整数池、小数池、有理数池、负数池。而在计算机工程中常见的池为:连接池、内存池、线程池。
连接池是一种思想和技术:把整个数据库连接放入池内;当访问数据库时,如果连接存在,则直接采用原来的数据库连接;同时,新连接会存在连接池内,方便服用。
连接池带来了数据库访问的极大的效率提升:因为访问数据库一般用TCP连接,TCP建立连接会用三次握手;而连接池会减少很多不必要的重复连接,会极大提升数据库的访问效率。
池化在很大程度上对我们认识世界和工程管理带来了极大的便利。但池化也会引入麻烦,当数据或数据结构突破池的范围时,会造成整个程序的崩溃,并带来极大的危害。人类认识史上的池的崩溃例子为:人们刚开始只认识10个指头所能标记的数,当数字超过10时,很多小孩直接不再会算数。数学史上的一个池的崩溃为:毕达哥拉斯学派弟子希伯斯发现了无理数根 2,直接造成了数学王国的一段长期的危机。而在计算机工程上,内存池、连接池和线程池的崩溃,则可能造成巨大的损失。
2.JAVA常用连接池比较
JAVA常用的连接池有dbcp、c3p0、tomcat-jdbc、druid和HiKariCP。其中,dbcp、c3p0、tomcat-jdbc是第一代连接池,druid和HiKariCP是第二代连接池。不同连接池对比如下:
功能 | dbcp | druid | c3p0 | tomcat-jdbc | HikariCP |
是否支持PSCache | 是 | 是 | 是 | 否 | 否 |
监控 | jmx | jmx/log/http | jmx,log | jmx | jmx |
扩展性 | 弱 | 好 | 弱 | 弱 | 弱 |
sql拦截及解析 | 无 | 支持 | 无 | 无 | 无 |
代码 | 简单 | 中等 | 复杂 | 简单 | 简单 |
更新时间 | 2015.8.6 | 2015.10.10 | 2015.12.09 | 2015.12.3 | |
特点 | 依赖于common-pool | 阿里开源,功能全面 | 历史久远,代码逻辑复杂,且不易维护 | 优化力度大,功能简单,起源于boneCP | |
连接池管理 | LinkedBlockingDeque | 数组 | FairBlockingQueue | threadlocal+CopyOnWriteArrayList |
目前,大部分软件工程已经开始用Druid和HiKariCP。Druid 称最好的JAVA连接池,但这种“好”体现在功能强大,如进行监控,比较性能的话,还是HiKariCP。有兴趣的可以参考这篇博客:《数据库连接池选型 Druid vs HikariCP》(https://juejin.cn/post/6885974851949953031)
3.SpringBoot的默认连接池HiKariCP
目前SpringBoot中默认的连接池为HiKariCP,从SpringBoot2.0开始,不用配置即可添加HiKari CP。
可以在默认配置文件添加配置文件,配置样例如下:
4.设置样例
可以在SpringBoot程序中动态设置HiKariCP,样例如下:
5.参考文献
[1]主流数据库连接池性能比较 hikari druid c3p0 dbcp jdbc,https://www.cnblogs.com/barrywxx/p/8506571.html
[2]主流Java数据库连接池比较及前瞻,https://www.jianshu.com/p/b9b98ac3e010
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!