HiKariCP 是数据库连接池的一个后起之秀,号称性能最好,可以完美地PK掉其他连接池。
官网:https://github.com/brettwooldridge/HikariCP

1. SpringBoot1.X 整合数据库连接池 HikariCP

添加maven依赖

  1. <!-- JDBC连接数据库,因为要用HikariCP,所以需要将SpringBoot中的tomcat-jdbc排除 -->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-jdbc</artifactId>
  5. <exclusions>
  6. <exclusion>
  7. <groupId>org.apache.tomcat</groupId>
  8. <artifactId>tomcat-jdbc</artifactId>
  9. </exclusion>
  10. </exclusions>
  11. </dependency>
  12. <!-- HikariCP 连接池依赖,从父依赖获取额版本 -->
  13. <dependency>
  14. <groupId>com.zaxxer</groupId>
  15. <artifactId>HikariCP</artifactId>
  16. <!-- <scope>runtime</scope> -->
  17. </dependency>

添加配置

  1. #datasource config
  2. spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  3. spring.datasource.url=jdbc:mysql://rm-2ze8fu325c8wde1z0do.mysql.rds.aliyuncs.com:3306/jiaoyan_cloud?zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
  4. spring.datasource.username=guojinpeng
  5. spring.datasource.password=46d8yx5m
  6. spring.datasource.max-idle=10
  7. spring.datasource.max-active=15
  8. #一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒,参考MySQL wait_timeout参数(show variables like '%timeout%';)
  9. spring.datasource.max-lifetime=86430000
  10. spring.datasource.log-abandoned=true
  11. spring.datasource.remove-abandoned=true
  12. spring.datasource.remove-abandoned-timeout=60
  13. spring.datasource.initialize=false
  14. spring.datasource.sqlScriptEncoding=UTF-8

新建配置类 DataSourceConfig.java

  1. import com.zaxxer.hikari.HikariConfig;
  2. import com.zaxxer.hikari.HikariDataSource;
  3. import org.springframework.beans.factory.annotation.Value;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import javax.sql.DataSource;
  7. /**
  8. * HikariCP连接池配置
  9. */
  10. @Configuration
  11. public class DataSourceConfig {
  12. @Value("${spring.datasource.url}")
  13. private String dataSourceUrl;
  14. @Value("${spring.datasource.username}")
  15. private String user;
  16. @Value("${spring.datasource.password}")
  17. private String password;
  18. @Bean
  19. public DataSource dataSource() {
  20. HikariConfig config = new HikariConfig();
  21. /** 数据源 */
  22. config.setJdbcUrl(dataSourceUrl);
  23. /** 用户名 */
  24. config.setUsername(user);
  25. /** 密码 */
  26. config.setPassword(password);
  27. /** 是否自定义配置,为true时下面两个参数才生效 */
  28. config.addDataSourceProperty("cachePrepStmts", "true");
  29. /** 连接池大小默认25,官方推荐250-500 */
  30. config.addDataSourceProperty("prepStmtCacheSize", "250");
  31. /** 单条语句最大长度默认256,官方推荐2048 */
  32. config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
  33. /** 新版本MySQL支持服务器端准备,开启能够得到显著性能提升 */
  34. config.addDataSourceProperty("useServerPrepStmts", "true");
  35. config.addDataSourceProperty("useLocalSessionState", "true");
  36. config.addDataSourceProperty("useLocalTransactionState", "true");
  37. config.addDataSourceProperty("rewriteBatchedStatements", "true");
  38. config.addDataSourceProperty("cacheResultSetMetadata", "true");
  39. config.addDataSourceProperty("cacheServerConfiguration", "true");
  40. config.addDataSourceProperty("elideSetAutoCommits", "true");
  41. config.addDataSourceProperty("maintainTimeStats", "false");
  42. HikariDataSource ds = new HikariDataSource(config);
  43. return ds;
  44. }
  45. }

2. SpringBoot2.x 整合

springboot2.0之后,采用的默认数据库连接池就是Hikari。不需要引入依赖,已经在SpringBoot中包含了。

在yml中配置

  1. # 数据库配置
  2. spring:
  3. datasource:
  4. type: com.zaxxer.hikari.HikariDataSource
  5. driverClassName: com.mysql.jdbc.Driver
  6. url: jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8&useSSL=false
  7. username: root
  8. password: root
  9. # Hikari 连接池配置
  10. # 最小空闲连接数量
  11. hikari:
  12. minimum-idle: 5
  13. # 空闲连接存活最大时间,默认600000(10分钟)
  14. idle-timeout: 180000
  15. # 连接池最大连接数,默认是10
  16. maximum-pool-size: 10
  17. # 此属性控制从池返回的连接的默认自动提交行为,默认值:true
  18. auto-commit: true
  19. # 连接池名称
  20. pool-name: MyHikariCP
  21. # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
  22. max-lifetime: 1800000
  23. # 数据库连接超时时间,默认30秒,即30000
  24. connection-timeout: 30000
  25. connection-test-query: SELECT 1

Hikari配置说明:
image.png
image.png