什么是连接池

数据库连接池负责分配、管理和释放数据库的连接。

  • 数据库连接复用:重复使用现有的数据库长连接,可以避免连接频繁建立、关闭的开销。
  • 统一的连接管理:释放空闲时间超过最大空闲时间的数据库连接,避免因为没有释放数据库连接而引起的数据库连接泄漏。

什么是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介绍(包含配置示例)相关推荐

  1. 组播IGMP-原理介绍+报文分析+配置示例

    个人认为,理解报文就理解了协议.通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议. 因此本文将在IGMPv2协议报文的基础上进行介绍,以详细介绍主机-路由器IGMP组播协议.I ...

  2. BGPv4-原理介绍+报文分析+配置示例

    个人认为,理解报文就理解了协议.通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议. 因此本文将在BGP Version4协议上进行介绍,以详细介绍BGP的相关内容. 关于BGP ...

  3. IPv6/ICMPv6-原理介绍+报文分析+配置示例

    个人认为,理解报文就理解了协议.通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议. 因此本文将以IPv6的常用协议上进行介绍,以详细介绍IPv6的相关内容. 关于ICMPv6相 ...

  4. 组播MSDP-原理介绍+报文分析+配置示例

    个人认为,理解报文就理解了协议.通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议. 因此本文将在MSDP协议(Multicast Source Discovery Protoc ...

  5. nginx 配置示例_Nginx位置指令示例

    nginx 配置示例 The location directive within NGINX server block allows to route request to correct locat ...

  6. Nginx 配置示例

    文章目录 Nginx主配置文件调优 Nginx HTTP跳转HTTPS Nginx代理PHP服务 Nginx作为代理服务器 Nginx作为负载均衡服务器 Nginx作为静态文件服务器 Nginx反向代 ...

  7. 无线lan连接服务器,无线 LAN 控制器和轻量接入点基本配置示例

    本文档提供了轻量接入点 (AP) 的基本配置示例,该接入点通过 Cisco Catalyst 交换机连接到 Cisco 无线局域网 (WLAN) 控制器 (WLC). 尝试进行此配置之前,请确保满足以 ...

  8. 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)和数 ...

  9. 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的安装 ...

  10. Tomcat简介 安装 配置 示例

    Tomcat简介 & 安装 & 配置 & 示例 1.Tomcat简介 2.Tomcat安装 1)RPM包安装 2)二进制安装 3.配置 1)server.xml组件类别 2)s ...

最新文章

  1. 写在《30天自制操作系统》上市之前
  2. boost::math::hyperexponential用法的测试程序
  3. 8位可控加减法电路设计_高级工程师:相同的地线GND,却有不同的电路设计含义...
  4. android 手机 熄屏 短信控制_华为手机音量键还隐藏着这8个实用功能,终于知道了...
  5. 【今日CV 计算机视觉论文速览 91期】Mon, 1 Apr 2019
  6. 《图像处理知识》宝藏总纲
  7. 为什么只能sudo进mysql_解决项目中MySQL数据库执行删除语句时间太长的问题
  8. html input 字体颜色_html 元素参考整合实用收藏!前端web工程师必备!
  9. ppt中流程图旁边怎么添加_辅食中的黑芝麻酱怎么添加呢?
  10. python 堆栈_Python堆栈
  11. JS的浮点数计算精度丢失问题解决方案
  12. [蓝桥杯]java实现第39级台阶
  13. 谁为「滑板底盘」买单
  14. 金匮要略重点整理 笔记
  15. Linux lseek函数
  16. 安卓巴士Android开发者门户
  17. 10个免费学术论文期刊网站
  18. html文件怎么转换mp4,免费swf格式转换器,swf转换mp4的简易方法
  19. GitHub有什么作用?
  20. 江苏省计算机中级职称题库,计算机中级职称考试复习题「附答案」

热门文章

  1. 反击网络执法官(转)
  2. matlab 流固耦合,流固耦合的研究与发展综述
  3. 惠普局域网共享打印机设置_惠普打印机局域网共享
  4. 微软同步工具之synctoy
  5. 【ember zigbee】第三章:ug103-02-fundamentals-zigbee 学习笔记(中)
  6. Mstar官网下载转换成jpg格式的保姆级教程
  7. 简单工厂模式、工厂模式以及抽象工厂模式(具体)
  8. SONY UP-D898MD 或 UP-X898MD驱动在WIN10 64下的安装
  9. python读音有道-[Python]通过有道词典API获取单词发音MP3
  10. android木马的制作方法,实现木马病毒的详细步骤