Skip to content

Spring Boot(八):Spring Boot整合Mybatis Hikari连接池


Spring Boot(七):Spring Boot整合Mybatis 连接池中,我们在对Mybatis基础上添加了Druid连接池的优化。Spring Boot 2.0开始就内置了默认的连接池Hikari,所以不需要添加依赖即可在Spring Boot项目中使用。

Hikari因是Spring Boot子项目,所以社区比较活跃,因其自身也有以下几点优势,所以项目中也常常采用。

  • 字节码精简 :优化代码,直到编译后的字节码最少,这样,CPU缓存可以加载更多的程序代码;
  • 优化代理和拦截器 :减少代码,例如 HikariCP 的 Statement proxy只有 100 行代码,只有 BoneCP 的十分之一;
  • 自定义数组类型(FastStatementList)代替ArrayList :避免每次get() 调用都要进行 range check,避免调用 remove() 时的从头到尾的扫描;
  • 自定义集合类型 ConcurrentBag :提高并发读写的效率;
  • 其他针对 BoneCP 缺陷的优化。

Hikari因是Spring Boot内置连接池,使用更加简单,只需要在Spring Boot(六):Spring Boot整合Mybatis源码基础上,增加Hikari连接池的配置文件即可。

1.Hikari配置

yaml
#数据库配置
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/springboot_test
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
    ##Hikari连接池的设置
    #最小连接
    hikari.minimum-idle: 5
    #最大连接
    hikari.maximum-pool-size: 15
    #自动提交
    hikari.auto-commit: true
    #最大空闲时常
    hikari.idle-timeout: 30000
    #连接池名
    hikari.pool-name: DatebookHikariCP
    #最大生命周期
    hikari.max-lifetime: 900000
    #连接超时时间
    hikari.connection-timeout: 15000
    #心跳检测
    hikari.connection-test-query: SELECT 1

2.Junit测试

运行如下Junit代码

java
    @Test
    public void testCURD() {
        testInsertUser();
        testUpdateUser();
        testFindAll();
        testDelete();
    }

console效果,已经可以看到使用的是Hikari连接池了

image.png

3.druid与hikari优缺点

前面一篇已经介绍了druid,那肯定要比较下本文使用的hikari和druid的优缺点

在性能方面:HikariCP因为细节方面优化力度较大,性能方面强于Druid

hikariCP

  • hikariCP 的性能十分优异,号称java平台最快的数据库连接池。
  • hikariCP在并发较高的情况下,性能基本上没有下降。
  • 从字节码的维度优化代码。让方法尽量在35个字节码以下,来提升jvm的处理效率。 (default inline threshold for a JVM running the server Hotspot compiler is 35 bytecodes )
  • HiKariCP性能比Druid高
  • HiKariCP是Spring Boot 2+官方支持并默认内置,就像jackson一样,和Spring Boot兼容性更好 Druid

Druid的优势是监控完善,扩展性更好

  • 功能丰富程度方面:Druid功能更全面除了具有连接池的基本功能以外,还支持sql级监控,支持扩展,防止SQL注入等功能。
  • 可视化监控,统计数据较为全面。

使用热度:Druid在国内使用较多,国内有很多生产实践。HikariCP是spring boot 2.0以后默认连接池,在国外使用较多

4.源码地址

08-spring-boot-mybatis-hikari