一、背景介绍
Spring Boot 1.x
版本默认单数据库连接池使用的是 Tomcat JDBC Pool
,从 Spring Boot 2.0
开始,Spring
官方开始推荐使用 HikariCP
并且默认采用该连接池,HikariCP
在性能和并发方面表现优异,号称最快的连接池。
二、组件引入
-
非
Spring Boot 2.x
项目的引入方式<!-- https://github.com/brettwooldridge/HikariCP --> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>${版本号}</version> </dependency>
-
采用
Spring Boot 2.x
项目的引入方式(以下方式三选一均可)-
引入
spring-boot-starter-jdbc
组件的方式,会自动添加对HikariCP
的依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
-
引入
spring-boot-starter-data-jpa
组件的方式,会自动添加对HikariCP
的依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
-
引入
mybatis-plus-boot-starter
组件的方式,会自动添加对HikariCP
的依赖<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.2</version> </dependency>
P.S
当然如果你引入了以上的组件,你也可以强制使用其它的连接池技术,可以通过在
application.properties
或application.yml
中配置spring.datasource.type
指定# 指定数据源为阿里巴巴的德鲁伊数据源 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource # 指定数据源为光数据源 spring.datasource.type=com.zaxxer.hikari.HikariDataSource
<!-- 阿里巴巴德鲁伊数据源对组件依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> </dependency>
-
三、测试案例
-
创建
Spring Boot 2.x
项目工程IDEA
➡File
➡New
➡Project
➡Spring Initailizr
… … -
pom
中引入数据库相关依赖<!-- MySQL连接驱动依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version> </dependency> <!-- MyBaits-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.1</version> </dependency> <!-- 分页插件 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.13</version> </dependency>
-
application.yaml
配置数据库相关连接信息spring: # ==================================== 数据源相关配置开始 ===================================== # Hikari pool https://github.com/brettwooldridge/HikariCP datasource: name: SPRING-BOOT-SAMPLE-MYSQL driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/exercise?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false username: ENC(XXXX) password: ENC(XXXX) type: com.zaxxer.hikari.HikariDataSource hikari: # 连接池中允许的最小连接数。缺省值:10 minimum-idle: 30 # 连接池中允许的最大连接数。缺省值:10 maximum-pool-size: 100 # 自动提交 auto-commit: true # 一个连接 idle 状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟 idle-timeout: 30000 # 连接池名字 pool-name: SampleProjectHikairCP # 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒 max-lifetime: 1800000 # 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒 connection-timeout: 30000 # 数据库连接测试语 connection-test-query: SELECT 1 # ==================================== 数据源相关配置结束 ===================================== # ==================================== 数据库插件配置开始 ===================================== mybatis-plus: # 一定要对应mapper映射xml文件的所在路径 mapper-locations: classpath:mapping/**/*.xml # 对应实体类的路径 type-aliases-package: com.rambo.springbootsample.model global-config: banner: false pagehelper: helper-dialect: mysql reasonable: true support-methods-arguments: true params: count=countSql return-page-info: check # ==================================== 数据库插件配置结束 =====================================
-
编写业务代码进行功能测试
-
控制器
@GetMapping("/list/{pageNum}/{pageSize}") @ApiOperation(value = "分页获取雇员信息", notes = "备注信息") public DataResult<List<Employee>> getEmployeePageInfo(@PathVariable(value = "pageNum") Integer pageNum, @PathVariable(value = "pageSize") Integer pageSize) { List<Employee> listEmployee = employeeService.listEmployeePage(pageNum, pageSize); return DataResult.getDataResult(listEmployee); }
-
服务层
@Override public List<Employee> listEmployeePage(Integer pageNum, Integer pageSize) { pageNum = pageNum == null ? 1 : pageNum; pageSize = (pageSize == null || pageSize == 0) ? 10 : pageSize; log.info("查询雇员信息,从{}页开始,查询{}条记录", pageNum, pageSize); PageHelper.startPage(pageNum, pageSize); return employeeExtMapper.queryAllEmployee(); }
-
DAO层
/** * 分页查询雇员信息记录 * * @author Rambo * @date 2021/1/8 16:10 * @return java.util.List<Employee> */ List<Employee> queryAllEmployee();
-
Mapper实现
<!-- @description 查询所有雇员信息--> <!-- @author Rambo--> <!-- @date 2021/1/8 16:11 --> </select><select id="queryAllEmployee" resultMap="BaseExtResultMap"> SELECT <include refid="Base_Ext_Column_List"/> FROM employee </select>
-
演示效果
-