SpringBoot 中 HikariCP 的相关配置

2023-03-04 11:27:42 浏览数 (2)

通常,可以在application.yml中对数据源进行相应的配置,从性能方面来讲,数据库连接池的优先级为:HikariCP > druid > tomcat-jdbc > dbcp > c3p0 。自 SpringBoot 2.0 起,默认的数据库连接池便是 HikariCP,在 pom 文件中引入spring-boot-starter-parent后便无需再引入 HikariCP 的依赖。 对于 HikariCP 的配置,主要可以从两个方面获取: 1. SpringBoot官方参考文档 2. HikariCP的github发布页 为了便于日后可能的查询,在此记录下详细的配置信息。

1. 通用配置

代码语言:javascript复制
spring:
    datasource:
    # 数据库驱动
        driver-class-name: com.mysql.cj.jdbc.Driver
    #数据库链接地址
        url: jdbc:mysql://localhost:3306/blue?serverTimezone=UTC
    #数据库用户名
        username: username
    #用户名对应密码
        password: passcode

2. 连接池配置

形式为:spring.datasource.hikari.*,推荐的配置形式为:

代码语言:javascript复制
spring:
    datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/blue?serverTimezone=UTC
        username: ***
        password: ***
        hikari:
            connection-timeout: 10000
            validation-timeout: 3000
            idle-timeout: 60000
            login-timeout: 5
            max-lifetime: 60000
            maximum-pool-size: 10
            minimum-idle: 5
            read-only: false

下面给出详细的配置信息:

  • 使用率较高
  1. autoCommit:用于控制从池中返回连接的默认自动提交行为,默认为true
  2. connectionTimeout:客户端等待池中连接的最大事件(毫秒),超时则会抛出 SQLException,最低可接受时间为 250ms,默认值为30000ms
  3. idleTimeout:池中连接保持空闲状态的最长时间,只有在定义的minimumIdle 小于maximumPoolSize时生效,允许的最小时间为 10000ms。默认为 600000ms
  4. keepaliveTime:用于控制 HikariCP 中空闲线程的最大存活时间,该值必须小于maxLifetime,最小为 30000ms。默认为 0 (disabled)
  5. maxLifetime:控制连接池中连接的最长时间,正在使用的连接不会被删除,只有当其关闭连接后才会被删除,当设置为 0 时表示永不删除,最小允许值为 30000ms。 默认值为 1800000ms
  6. connectionTestQuery:当使用的驱动为 JDBC4 时不建议设置该项。
  7. minimumIdle:控制 HikariCP 中维护的最小空闲连接数。当空闲连接数小于 minimumIdle 并且池中的总连接数少于 maximumPoolSize 时,HikariCP 将添加其他连接直到 maximumPoolSize。为了获得最佳性能和对峰值需求的响应能力建议不要设置此值。 默认值与 maximumPoolSize 相同
  8. maximumPoolSize:连接池中的最大连接数。默认为 10
  9. metricRegistry:该项仅在编程式配置IoC容器中使用,允许指定一个 Codahale/Dropwizard MetricRegistry 的实例来记录池中的各项指标
  10. healthCheckRegistry:同上,用于报告当前连接池的健康状况
  11. poolName:定义连接池的名称,可以在日志或控制台识别连接池
  • 不常使用
  1. initializationFailTimeout:允许初始化失败的次数。默认值为 1
  2. isolateInternalQueries:控制 HikariCP 是否在其自己的事务中隔离内部池查询,仅在禁用 autoCommit 时适用。默认值为 false
  3. allowPoolSuspension:控制连接池是否可以通过JMX暂停和恢复,当连接池暂停时,对 getConnection() 的调用永不超时,直到连接池恢复。默认为 false
  4. readOnly:控制从池中获取的连接是否默认为只读。默认为 false
  5. registerMbeans:控制是否注册JMX Management Bean (MBean)。默认值为 false
  6. catalog:为支持目录概念的数据库设置默认目录。如果未指定此属性,则使用 JDBC 驱动程序定义的默认目录。默认值为 driver default
  7. connectionInitSql:设置一个 SQL 语句,该语句将在每次创建新连接后执行,然后再将其添加到池中。如果此 SQL 无效或引发异常,它将被视为连接失败,并且将遵循标准的重试逻辑。
  8. driverClassName:HikariCP 将尝试通过基于 jdbcUrlDriverManager 解析驱动程序,但对于一些较旧的驱动程序,必须指定 driverClassName
  9. transactionIsolation:控制从池中返回连接的默认事务隔离级别。如果未指定此属性,则使用 JDBC 驱动定义的默认事务隔离级别。默认值为 driver default
  10. validationTimeout:控制用于测试连接的最长存活时间,该值必须小于 connectionTimeout,最短时间为 250ms。默认值为 5000ms
  11. leakDetectionThreshold:控制在log日志记录可能发生连接泄漏的消息之前,连接可以离开池的时间。值为 0 表示禁用泄漏检测。启用泄漏检测的最低时间为 2000ms。 默认值为 0
  12. dataSource:仅可通过编程式配置IoC容器使用。通过此属性可以直接设置 DataSource 要由池包装的的实例,而不必让 HikariCP 通过反射进行构造
  13. schema:为支持 schema 概念的数据库设置默认的 schema,如果未指定此属性,则使用 JDBC 驱动定义的默认模式。
  14. threadFactory:仅可通过编程式配置IoC容器使用。此属性允许通过 java.util.concurrent.ThreadFactory 创建池使用的所有线程
  15. scheduledExecutor:仅可通过编程式配置IoC容器使用。此属性允许通过 java.util.concurrent.ScheduledExecutorService 设置实将用于各种内部任务的调度。

0 人点赞