一、介绍
HikariCP是一款开源的数据库连接组件,相较传统的连接池C3P0,DBPC等具有速度快,稳定性高、并发支持好的特点,具有连接数控制、连接可靠性测试、连接泄露控制、缓存语句等功能。
1.2 项目地址
GitHub主页:
https://github.com/brettwooldridge/HikariCP
1.3 程序版本
- Spring Boot版本:2.3.2.RELEASE
二、特点
与传统的数据库连接池相比,HikariCP有几大优点
- 代码量少
代码量越少,一般意味着执行效率越高、发生bug
的可能性越低
连接池 | 文件 | 代码行 |
---|---|---|
C3P0 | 120 | 15550 |
Tomcat | 31 | 6345 |
BoneCP | 49 | 7293 |
HikariCP | 21 | 2228 |
- 速度快
相较其他的数据库连接池,HikariCP具有速度快,兼容性好,高并发时可靠性高等优点
- 稳定性高
部署HikariCP后系统访问的稳定性得到大幅度增强
三、 与Druid的比较
功能 | HikariCP | Druid |
---|---|---|
支持PSCache | 否 | 是 |
监控 | jmx | jmx/log/http |
sql拦截及解析 | 不支持 | 支持 |
代码 | 简单 | 中等 |
特点 | 优化好,功能简单,速度快 | 阿里开源,功能强大,支持监控 |
Druid作为阿里唯一使用的数据库连接池经历过双十一等大型应用场景考验,中文文档丰富,国内使用较多。
HikariCP代码简单,稳定性强,速度快,适合对速度要求较高的场景,在国外使用较多。
四、环境搭建
HiKariCP的以其性能和稳定性得到了广泛的认可,Spring Boot在更新到2.x后默认使用HikariCP作为数据库连接池;创建一个Spring Boot的Web项目,自动引入spring-boot-starter
包,其中包括HikariCP包,查看依赖
本章主要对介绍HikariCP的配置并对几个主要配置进行讲解
2.1 常用配置
属性 | 功能 |
---|---|
minimum-idle | 设定连接池最小空闲连接数量 |
maximum-pool-size | 设定连接池最大连接数 |
maximum-pool-size | 设定连接池最大连接数 |
max-lifetime | 设定连接池池中连接的最长生命周期 |
connection-timeout | 连接池连接数据库超时时间,超出该时间抛出错误 |
不配置时连接池使用默认数值,可根据程序的需求进行配置
2.2 配置pom文件
因为Spring Boot Web项目默认添加HikariCP相关依赖,只需要配置数据库驱动相关及连接相关依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.toj</groupId>
<artifactId>hikaridemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hikaridemo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<mybatis.version>3.5.5</mybatis.version>
<mybatis-spring-boot-starter.version>2.1.3</mybatis-spring-boot-starter.version>
<mysql-connector-java.version>5.1.46</mysql-connector-java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- MyBatis框架 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot-starter.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- MySQL数据库连接工具 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.3配置properties文件
spring.datasource.hikari.pool-name=MyHikariCP
该属性配置了数据库连接池名称,启动时可以显示,其他均为常规配置
#端口
server.port=9006
#配置数据库连接信息
spring.datasource.url=jdbc:mysql://localhost:3306/user?characterEncoding=utf-8&useSSL=false
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
# MyBatis配置
mybatis.type-aliases-package=cn.toj.druiddemo.domain
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.configuration.map-underscore-to-camel-case=true
# Hikari连接池的设置
## 配置HikariCP数据库连接池(默认为HikariCP,由spring-boot-starter包引入)
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
## 连接池名字
spring.datasource.hikari.pool-name=MyHikariCP
## 最小空闲连接数量
spring.datasource.hikari.minimum-idle=10
## 连接池最大连接数,默认是10
spring.datasource.hikari.maximum-pool-size=20
## 数据库连接超时时间,默认30000ms(30秒)
spring.datasource.hikari.connection-timeout=60000
## 空闲连接存活最大时间,默认600000ms(10分钟)
spring.datasource.hikari.idle-timeout=300000
## 控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000ms(30分钟)
spring.datasource.hikari.max-lifetime=3600000
四、Demo开发演示
因测试的是数据库连接池,所以代码方面与400ToJava:119-Druid数据库连接池介绍基本一致,概述方面只给出整体架构
3.1 Demo概述
3.2 Demo验证
因之前配置已配置完毕,项目启动后查看输出日志,启动时没有对HikariCP进行初始化,使用Postman访问程序,程序访问数据库时才进行初始化,可看到MyHikariCP
启动成功
3.3 Demo下载地址
- GitHub项目地址:
https://github.com/diyzhang/42j120-hikaridemo
- 使用Git下载项目的命令:
git clone https://github.com/diyzhang/42j120-hikaridemo.git