HikariCP–基础–02–配置参数
1、config参数
1.1、autoCommit
- 从池中借出的连接是否默认自动提交事务
- 默认:true
1.2、connectionTimeout
- 当我从池中借出连接时,愿意等待多长时间。如果超时,将抛出 SQLException
- 默认:30000
- 最小值 250 ms。
- 支持 JMX 动态修改
- 如果小于250毫秒,则被重置回30秒
1.3、idleTimeout
- 一个连接在池里闲置多久时会被抛弃
- 当 minimumIdle < maximumPoolSize 才生效
- 默认:600000
- 最小值:10000 ms
- 如果idleTimeout!=0且小于10秒,则会被重置为10秒
- 0表示禁用该功能。
- 如果idleTimeout+1秒>maxLifetime 且 maxLifetime>0,则会被重置为0(代表永远不会退出);
- 支持 JMX 动态修改
1.4、maxLifetime
- 池中连接最长生命周期,当一个连接存活了足够久,HikariCP 将会在它空闲时把它抛弃
- 默认:1800000 ms
- 最小值:30000 ms
- 如果maxLifetime不等于0且小于30秒则会被重置回30秒
- 0 表示禁用该功能。
- 支持 JMX 动态修改
1.5、connectionTestQuery
- 用来检查连接活性的 sql,要求是一个查询语句,常用select ‘x’
- 如果驱动支持 JDBC4.0,建议不设置,这时默认会调用 Connection.isValid() 来检查,该方式会更高效一些
- 默认:null
1.6、minimumIdle
- 池中维护的最小空闲连接数,池中至少要有多少空闲连接
- 默认:等于maximumPoolSize
- minIdle<0或者minIdle>maxPoolSize,则被重置为maxPoolSize
- 当空闲连接 < minimumIdle,总连接 < maximumPoolSize 时,将新增连接
- 支持 JMX 动态修改
1.7、maximumPoolSize
- 池中最多容纳多少连接包括空闲的和在用的
- 默认:10
- 支持 JMX 动态修改
1.8、metricRegistry
- 用于记录连接池各项指标的 MetricRegistry 实现
- 默认:null,只能通过代码设置
1.9、healthCheckRegistry
- 用于报告连接池健康状态的 HealthCheckRegistry 实现类
- 默认:null,只能通过代码设置
1.10、poolName
- 连接池名称。
- 主要用于在日志记录和JMX管理控制台中以识别池和池配置
- 默认:HikariPool-1
1.11、initializationFailTimeout
- 如果启动连接池时不能成功初始化连接,是否快速失败 TODO
- 值>0:会尝试获取连接。如果获取时间超过指定时长,不会开启连接池,并抛出异常
- 值=0:会尝试获取并验证连接。如果获取成功但验证失败则不开启池,但是如果获取失败还是会开启池
- 值<0:不管是否获取或校验成功都会开启池
- 值默认:1
1.12、isolateInternalQueries
- 是否在事务中隔离 HikariCP 自己的查询,例如连接活动测试
- autoCommit 为 false 时才生效
- 默认:false
1.13、allowPoolSuspension
- 是否允许通过 JMX 挂起和恢复连接池
- 默认:false
1.14、readOnly
- 当连接从池中取出时是否设置为只读
- 默认:false
1.15、registerMbeans
- 是否开启 JMX管理Bean(MBeans)
- 默认:false
1.16、catalog
- 数据库 catalog,默认由驱动决定
- 默认:false
1.17、connectionInitSql
- 该属性设置一个SQL语句,在每个连接创建后、放入池前,需要执行的该SQL语句,如果执行失败,该连接会被丢弃
- 默认:null
1.18、driverClassName HikariCP
- 将尝试通过仅基于jdbcUrl的DriverManager解析驱动程序,但对于一些较旧的驱动程序,还必须指定driverClassName。
- 默认:null
1.19、transactionIsolation
- 连接的默认事务隔离级别
- 默认:null,由驱动决定
1.20、validationTimeout
- 校验连接活性允许的超时时间
- 默认:5000
- 最小值:250 ms
- 要求小于 connectionTimeout
- 支持 JMX 动态修改
1.21、leakDetectionThreshold
- 连接对象可以被借出多久
- 默认:0不开启
- 如果大于0且不是单元测试,则进一步判断:(leakDetectionThreshold < SECONDS.toMillis(2) or (leakDetectionThreshold > maxLifetime && maxLifetime > 0),会被重置为0。
- 如果要生效则必须>0,而且不能小于2秒,而且当maxLifetime > 0时不能大于maxLifetime
- 最小允许值:2000 ms。
- 支持 JMX 动态修改
1.22、dataSource
- 直接指定 DataSource 实例,而不是通过 dataSourceClassName 来反射构造
- 默认:null,只能通过代码设置
1.23、schema
- 该属性为支持模式概念的数据库设置默认模式,支持SQL Script初始化执行
- 默认:null,由驱动决定
1.24、threadFactory
- 指定连接池获取线程的 java.util.concurrent.ThreadFactory实例。
- 默认:null,只能通过代码设置
1.25、scheduledExecutor
- 指定连接池开启定时任务的 java.util.concurrent.ScheduledExecutorService 实例建议设置setRemoveOnCancelPolicy(true)
- 默认:null,只能通过代码设置
1.26、keepaliveTime=0
- 多久检查一次连接的活性
- 检查时会先把连接从池中拿出来空闲的话,然后调用isValid()或执行connectionTestQuery来校验活性,如果通过校验,则放回池里。
- 默认:0 不启用
- 最小值为 30000 ms
- 必须小于 maxLifetime。
- 支持 JMX 动态修改
1.27、driverClassName
- JDBC 驱动使用的 Driver 实现类,一般根据 jdbcUrl 判断就行,报错说找不到驱动时才需要加
- 默认:null
1.28、dataSourceJndiName
- JNDI 配置的数据源名
- 默认:null
2、application.yml
# 不同数据源这四个配置都会用到
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#以下的配置项是hikari特有的配置
# 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 默认:30秒
spring.datasource.hikari.connection-timeout=30000
# 最小连接数
spring.datasource.hikari.minimum-idle=5
# 最大连接数
spring.datasource.hikari.maximum-pool-size=15
# 自动提交
spring.datasource.hikari.auto-commit=true
# 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),默认:10分钟
spring.datasource.hikari.idle-timeout=600000
# 连接池名字
spring.datasource.hikari.pool-name=DatebookHikariCP
# 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),默认:30分钟 1800000ms,建议设置比数据库超时时长少60秒
spring.datasource.hikari.max-lifetime=28740000
spring.datasource.hikari.connection-test-query=SELECT 1
#以下是针对MYSQL驱动的配置参数
# 在每个连接中缓存的语句的数量。默认值为保守值25。建议将其设置为250-500之间
spring.datasource.hikari.prepStmtCacheSize = 300
# 缓存的已准备SQL语句的最大长度,默认值是256,但是往往这个长度不够用
spring.datasource.hikari.prepStmtCacheSqlLimit = 2048
# 缓存开关,如果这里设置为false,上面两个参数都不生效
spring.datasource.hikari.cachePrepStmts = true
#较新版本的 MySQL 支持服务器端准备好的语句,这可以提供实质性的性能提升
spring.datasource.hikari.useServerPrepStmts = true
3、监控指标
