JAVA常用数据库连接池
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。
可以在默认配置文件添加配置文件,配置样例如下:
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test1?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=hongda$123456
spring.datasource.driverClassName=com.mysql.jdbc.Driverspring.datasource.max-idle=10
spring.datasource.max-active=15
spring.datasource.max-lifetime=86430000
spring.datasource.log-abandoned=true
spring.datasource.remove-abandoned=true
spring.datasource.remove-abandoned-timeout=60
spring.datasource.initialize=false
spring.datasource.sqlScriptEncoding=UTF-8
4.设置样例
可以在SpringBoot程序中动态设置HiKariCP,样例如下:
public static SessionFactory getSessionFactory() {SessionFactory sessionFactory = null;try { Configuration configuration = new Configuration();Properties settings = new Properties();settings.put(Environment.DIALECT, "org.hibernate.dialect.MySQL5Dialect");settings.put(Environment.SHOW_SQL, "true");settings.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, "thread"); settings.put(Environment.DRIVER, "com.mysql.cj.jdbc.Driver");settings.put(Environment.USER, "***");settings.put(Environment.PASS, "***");settings.put(Environment.URL, "jdbc:mysql://地址:端口号/数据库名称?serverTimezone=GMT%2B8");// HikariCP settings // Maximum waiting time for a connection from the poolsettings.put("hibernate.hikari.connectionTimeout", "20000");// Minimum number of ideal connections in the poolsettings.put("hibernate.hikari.minimumIdle", "10");// Maximum number of actual connection in the poolsettings.put("hibernate.hikari.maximumPoolSize", "20");// Maximum time that a connection is allowed to sit ideal in the poolsettings.put("hibernate.hikari.idleTimeout", "300000");configuration.setProperties(settings);configuration.addAnnotatedClass(GsmTaskSpecs.class); //可以加更多的配置ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();sessionFactory = configuration.buildSessionFactory(serviceRegistry);} catch (Throwable ex) {// Make sure you log the exception, as it might be swallowedsessionFactory = null;ex.printStackTrace();}return sessionFactory;}
5.参考文献
[1]主流数据库连接池性能比较 hikari druid c3p0 dbcp jdbc,https://www.cnblogs.com/barrywxx/p/8506571.html
[2]主流Java数据库连接池比较及前瞻,https://www.jianshu.com/p/b9b98ac3e010
JAVA常用数据库连接池相关推荐
- 常用数据库连接池 (DBCP、c3p0、Druid) 配置说明
转载自 常用数据库连接池 (DBCP.c3p0.Druid) 配置说明 1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的 ...
- java使用数据库连接池连接MySQL/MariaDB--DBCP2
如果每次操作数据库都需要重新连接数据库,那么会很浪费资源.因此建议使用数据库的连接池来满足多线程的数据库操作. Java中数据库连接池有多种实现方法,推荐使用DBCP,这是Apache 提供的数据库连 ...
- Java jdbc数据库连接池
1. 引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的 ...
- Java常用线程池-固定线程池使用
Java常用线程池-固定线程池使用 固定线程池 固定线程池 在执行数据处理时不可避免的需要使用多线程进行数据处理,以此提高数据处理效率,降低处理时间.而线城池现在池容器对数据处理效率提升有举足轻重的作 ...
- java 常用的数据库连接池,java通过数据库连接池的方式
数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏 ...
- java通过数据库连接池的方式连接数据库(C3P0)
数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏 ...
- mysql 常用数据库连接池_常见的数据库连接池
欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入 2.C3P0 在Hibernate和Spring中默认支持该数据库连接池 需要引入:c3p0-0.9.1.2.jar包,如果 ...
- java面试 数据库连接池_阿里面试官:数据库连接池有必要吗?你对它的底层实现了解过没?...
# 前言 数据库连接池的基本思想是:为数据库连接建立一个"缓冲池",预先在池中放入一定数量的数据库连接管道,需要时,从池子中取出管道进行使用,操作完毕后,在将管道放入池子中,从而避 ...
- java tomcat数据库连接池_tomcat配置数据库连接池2
数据库连接是比较耗时的操作,如果每次访问数据库都开闭一次连接的话,在大批量访问时,必然会导致性能问题,于是这里成为了你的性能瓶颈.为了解决这个问题, 为了简化通过连接池获取数据库连接的过程,JDBC2 ...
最新文章
- 腾讯云发布智慧能源四大新品,携手合作伙伴共建智慧能源生态圈
- centos 7 安装xfce 4桌面环境
- 【原】Mac下统计任意文件夹中代码行数的工具——cloc
- 【收藏】CentOS 7 安装NFS
- 一次mysql大数据量查询 慢查询导致服务阻塞后的学习
- oracle 9i sql_id,Oracle9i增添 wm_concat函数(转)
- 4月,诚邀你参加源码共读,学会看源码,打开新世界!开阔视野
- java中的各个数据结构区别
- 系统分析与设计-我爱烤鱼创新过程与UP过程对比分析之我见
- win10读取linux硬盘,win10怎么读取lxext4格式硬盘
- linux 平台驱动分析
- 计算机英语词汇输入,常用计算机英语词汇:BIOS
- sqlserver 自定义日期函数(MMdd)
- 英文日期和时间表示方法
- 一名交互设计师必备的知识架构
- PopupWindow需要设置边距
- (Python)异常处理try...except、raise
- html js表单,HTML HTML 表单 - 闪电教程JSRUN
- Xbox手柄转子马达的控制运用机制原理
- PHP中curl的CURLOPT_POSTFIELDS请求时,Content-Type多出boundary=------------------------