什么是HikariCP?HikariCP介绍(包含配置示例)
什么是连接池
数据库连接池负责分配、管理和释放数据库的连接。
- 数据库连接复用:重复使用现有的数据库长连接,可以避免连接频繁建立、关闭的开销。
- 统一的连接管理:释放空闲时间超过最大空闲时间的数据库连接,避免因为没有释放数据库连接而引起的数据库连接泄漏。
什么是HikariCP
HikariCP 是一个高性能的 JDBC 连接池组件,号称性能最好的后起之秀,是一个基于BoneCP做了不少的改进和优化的高性能JDBC连接池。
其作者还有产出了另外一个开源作品HikariJSON——高性能的JSON解析器。
代码体积更是少的可怜,130kb。Spring Boot 2都已经宣布支持了该组件,由之前的Tomcat换成HikariCP。
其性能远高于c3p0、tomcat等连接池,以致后来BoneCP作者都放弃了维护,在Github项目主页推荐大家使用HikariCP
上边说到是在BoneCP基础上做了优化,那做了哪些优化呢?
- 字节码精简 :优化代码(HikariCP利用了一个第三方的Java字节码修改类库Javassist来生成委托实现动态代理,动态代理的实现在ProxyFactory类),直到编译后的字节码最少,这样,CPU缓存可以加载更多的程序代码;
- 优化代理和拦截器:减少代码,例如HikariCP的Statement proxy只有100行代码,只有BoneCP的十分之一;
- 自定义数组类型(FastStatementList)代替ArrayList:避免每次get()调用都要进行range check,避免调用remove()时的从头到尾的扫描,相对与ArrayList极大地提升了性能,而其中的区别是,ArrayList在每次执行get(Index)方法时,都需要对List的范围进行检查,而FastStatementList不需要,在能确保范围的合法性的情况下,可以省去范围检查的开销。
- 自定义集合类型(ConcurrentBag):支持快速插入和删除,特别是在同一线程既添加又删除项时,提高并发读写的效率;
- 针对CPU的时间片算法进行优化:尽可能在一个时间片里面完成各种操作(具体机制比较模糊)。
- 针对连接中断的情况:比其他CP响应时间上有了极好的优化,响应时间为5S,会抛出SqlException异常,并且后续的getConnection()可以正常进行
- 关于Connection的操作:另外在Java代码中,很多都是在使用完之后直接关闭连接,以前都是从头到尾遍历,来关闭对应的Connection,而HikariCP则是从尾部对Connection集合进行扫描,整体上来说,从尾部开始的性能更好一些。
HikariCP 的使用
重要参数
maximum-pool-size 池中最大连接数(包括空闲和正在使用的连接)
minimum-idle 池中最小空闲连接数量。默认值10
pool-name 连接池的名字
auto-commit 是否自动提交池中返回的连接。默认值为true。
idle-timeout 空闲时间。仅在minimum-idle小于maximum-poop-size的时候才会起作用。默认值10分钟。
max-lifetime 连接池中连接的最大生命周期。当连接一致处于闲置状态时,数据库可能会主动断开连接。
connection-timeout 连接超时时间。默认值为30s,可以接收的最小超时时间为250ms。但是连接池请求也可以自定义超时时间
#
# 配置数据源相关 使用 HikariCP 数据源
#
############################################################
# 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 默认:30秒
spring.datasource.hikari.connection-timeout=30000
# 最小连接数
spring.datasource.hikari.minimum-idle=5
# 最大连接数
spring.datasource.hikari.maximum-pool-size=15
# 自动提交
spring.datasource.hikari.auto-commit=true
# 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),默认:10分钟
spring.datasource.hikari.idle-timeout=600000
# 连接池名字
spring.datasource.hikari.pool-name=DatebookHikariCP
# 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),默认:30分钟 1800000ms,建议设置比数据库超时时长少60秒,参考MySQL wait_timeout参数(show variables like '%timeout%';) -->
spring.datasource.hikari.max-lifetime=28740000
spring.datasource.hikari.connection-test-query=SELECT 1
注意:如果配置不当,数据库连接池也可能因影响到系统性能
Maven
<dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>1.3.5</version><scope>compile</scope>
</dependency>
支持数据库
支持多种常见的数据库(包含但不限于):
Oracle、MS SQL Server、MySQL、PostgreSQL
什么是HikariCP?HikariCP介绍(包含配置示例)相关推荐
- 组播IGMP-原理介绍+报文分析+配置示例
个人认为,理解报文就理解了协议.通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议. 因此本文将在IGMPv2协议报文的基础上进行介绍,以详细介绍主机-路由器IGMP组播协议.I ...
- BGPv4-原理介绍+报文分析+配置示例
个人认为,理解报文就理解了协议.通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议. 因此本文将在BGP Version4协议上进行介绍,以详细介绍BGP的相关内容. 关于BGP ...
- IPv6/ICMPv6-原理介绍+报文分析+配置示例
个人认为,理解报文就理解了协议.通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议. 因此本文将以IPv6的常用协议上进行介绍,以详细介绍IPv6的相关内容. 关于ICMPv6相 ...
- 组播MSDP-原理介绍+报文分析+配置示例
个人认为,理解报文就理解了协议.通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议. 因此本文将在MSDP协议(Multicast Source Discovery Protoc ...
- nginx 配置示例_Nginx位置指令示例
nginx 配置示例 The location directive within NGINX server block allows to route request to correct locat ...
- Nginx 配置示例
文章目录 Nginx主配置文件调优 Nginx HTTP跳转HTTPS Nginx代理PHP服务 Nginx作为代理服务器 Nginx作为负载均衡服务器 Nginx作为静态文件服务器 Nginx反向代 ...
- 无线lan连接服务器,无线 LAN 控制器和轻量接入点基本配置示例
本文档提供了轻量接入点 (AP) 的基本配置示例,该接入点通过 Cisco Catalyst 交换机连接到 Cisco 无线局域网 (WLAN) 控制器 (WLC). 尝试进行此配置之前,请确保满足以 ...
- 1、【java数据安全】数据安全之加密解密(base64、MD、SHA、DES、AES、IDEA、PBE、DH、RSA、EIGamal)、数字签名(DSA、ECDSA)和数字证书介绍、应用示例详细介绍
java数据安全 系列文章 1.[java数据安全]数据安全之加密解密(base64.MD.SHA.DES.AES.IDEA.PBE.DH.RSA.EIGamal).数字签名(DSA.ECDSA)和数 ...
- php 5.2.16,windows中PHP5.2.14以及apache2.2.16安装配置示例
感兴趣的小伙伴,下面一起跟随512笔记的小编小韵来看看吧! 首先下载好需要安装的配置文件 1.apache-2.2.16 2.php-5.2.14-Win32 一.apache配置 apache的安装 ...
- Tomcat简介 安装 配置 示例
Tomcat简介 & 安装 & 配置 & 示例 1.Tomcat简介 2.Tomcat安装 1)RPM包安装 2)二进制安装 3.配置 1)server.xml组件类别 2)s ...
最新文章
- 写在《30天自制操作系统》上市之前
- boost::math::hyperexponential用法的测试程序
- 8位可控加减法电路设计_高级工程师:相同的地线GND,却有不同的电路设计含义...
- android 手机 熄屏 短信控制_华为手机音量键还隐藏着这8个实用功能,终于知道了...
- 【今日CV 计算机视觉论文速览 91期】Mon, 1 Apr 2019
- 《图像处理知识》宝藏总纲
- 为什么只能sudo进mysql_解决项目中MySQL数据库执行删除语句时间太长的问题
- html input 字体颜色_html 元素参考整合实用收藏!前端web工程师必备!
- ppt中流程图旁边怎么添加_辅食中的黑芝麻酱怎么添加呢?
- python 堆栈_Python堆栈
- JS的浮点数计算精度丢失问题解决方案
- [蓝桥杯]java实现第39级台阶
- 谁为「滑板底盘」买单
- 金匮要略重点整理 笔记
- Linux lseek函数
- 安卓巴士Android开发者门户
- 10个免费学术论文期刊网站
- html文件怎么转换mp4,免费swf格式转换器,swf转换mp4的简易方法
- GitHub有什么作用?
- 江苏省计算机中级职称题库,计算机中级职称考试复习题「附答案」
热门文章
- 反击网络执法官(转)
- matlab 流固耦合,流固耦合的研究与发展综述
- 惠普局域网共享打印机设置_惠普打印机局域网共享
- 微软同步工具之synctoy
- 【ember zigbee】第三章:ug103-02-fundamentals-zigbee 学习笔记(中)
- Mstar官网下载转换成jpg格式的保姆级教程
- 简单工厂模式、工厂模式以及抽象工厂模式(具体)
- SONY UP-D898MD 或 UP-X898MD驱动在WIN10 64下的安装
- python读音有道-[Python]通过有道词典API获取单词发音MP3
- android木马的制作方法,实现木马病毒的详细步骤