0%

SpringBoot中使用HikariCP连接池

简介

数据库连接池是为了规避每次查询时都向数据库建立连接而采用的技术,而向数据库创建连接往往比一次简单的查询所耗费的时间多好几倍,采用连接池在项目中可以有效的提升数据库查询的响应速度,而在SpringBoot中的spring-boot-starter-jdbc模块中又默认集成了HikariCP连接池,使我们很方便的在Springboot中使用数据库连接池.注意一下,由于本人使用的是mybatis持久化框架,HikariCP的依赖包含在spring-boot-starter-jdbc模块中,而mybatis-spring-boot-starter又包含了spring-boot-starter-jdbc,所以只需要引入mybatis-spring-boot-starter即可

引入maven POM依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>


<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>

<!-- 本人新建SpringBoot Web项目,也可只创建SpringBoot项目 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>

配置application.properties文件

连接池中最重要两个配置,最小连接数和最大连接数
  • spring.datasource.hikari.minimum-idle 最小空闲连接数量
  • spring.datasource.hikari.maximum-pool-size 连接池最大连接数
  1. 如果当前连接数小于最小连接数,则创建新的连接处理数据库请求
  2. 如果连接池中有空闲连接则复用空闲连接;
  3. 如果空闲池中没有连接并且当前连接数小于最大连接数,则创建新的连接
  4. 如果当前连接数已经大于等于最大连接数,则按照配置中设定的时间(HikariCP中为connectionTimeout)等待旧的连接可用
  5. 如果等待超过了这个设定时间则向用户抛出错误。
  • 使用mysql中有一点需要注意,就是mysql中wait_timeout参数控制了一个连接多长时间后将会被回收,所以我们将max-lifetime参数设置的比mysql中的这个参数值稍微小写
  • connection-test-query,此参数为在应用程序每次获取连接池连接时都会去执行一下语句,如果正常,则使用这个个连接,但是在官网的简介中新版本的jdbc不再推荐使用这个参数,而是自动会调用jdbc4接口中的Connection.isValid()方法去判断连接是否可用,因此我们去除这个参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mytest?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver




## Hikari 连接池配置 ------ 详细配置请访问:https://github.com/brettwooldridge/HikariCP
## 最小空闲连接数量
spring.datasource.hikari.minimum-idle=10
## 空闲连接存活最大时间,默认600000(10分钟)
spring.datasource.hikari.idle-timeout=180000
## 连接池最大连接数,默认是10
spring.datasource.hikari.maximum-pool-size=20
## 此属性控制从池返回的连接的默认自动提交行为,默认值:true
spring.datasource.hikari.auto-commit=true
## 连接池的用户定义名称,主要出现在日志记录和JMX管理控制台中以识别池和池配置
spring.datasource.hikari.pool-name=MyHikariCP
## 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟,如果是mysql可以将值配置的比mysql中wait_timeout参数稍小些
spring.datasource.hikari.max-lifetime=1800000
## 数据库连接超时时间,默认30秒,即30000
spring.datasource.hikari.connection-timeout=30000
## 如果支持驱动jdbc4不要设置
#spring.datasource.hikari.connection-test-query=SELECT 1