JAVA 数据库连接池系列 —— Spring Boot 2.x 整合 HikariCP 单数据源

一、背景介绍

  Spring Boot 1.x 版本默认单数据库连接池使用的是 Tomcat JDBC Pool ,从 Spring Boot 2.0 开始,Spring 官方开始推荐使用 HikariCP 并且默认采用该连接池,HikariCP 在性能和并发方面表现优异,号称最快的连接池。

二、组件引入
  1. Spring Boot 2.x 项目的引入方式

    <!-- https://github.com/brettwooldridge/HikariCP -->
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
        <version>${版本号}</version>
    </dependency>
    
  2. 采用 Spring Boot 2.x 项目的引入方式(以下方式三选一均可)

    • 引入 spring-boot-starter-jdbc 组件的方式,会自动添加对 HikariCP 的依赖

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-jdbc</artifactId>
      </dependency>
      

      1

    • 引入 spring-boot-starter-data-jpa 组件的方式,会自动添加对 HikariCP 的依赖

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-jpa</artifactId>
      </dependency>
      

      2

    • 引入 mybatis-plus-boot-starter 组件的方式,会自动添加对 HikariCP 的依赖

      <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-boot-starter</artifactId>
          <version>3.3.2</version>
      </dependency>
      

      3

    P.S

    当然如果你引入了以上的组件,你也可以强制使用其它的连接池技术,可以通过在 application.propertiesapplication.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>
    
三、测试案例
  1. 创建 Spring Boot 2.x 项目工程

    IDEAFileNewProjectSpring Initailizr … …

  2. 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>
    
  3. 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
    # ==================================== 数据库插件配置结束 =====================================
    
  4. 编写业务代码进行功能测试

    • 控制器

      @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>
      
    • 演示效果
      4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值