一、HikariCP 的简介
-
名词解释
Hikari - Hi·ka·ri [hi·ka·'lē] (Origin: Japanese): light; ray.
来自日文,是 “光” 的意思。作者估计是为了借助这个词来暗示这个CP
速度飞快,能与光速一争高下。有图有真相。
-
优势总结
-
字节码精简
优化代码,直接编译后的字节码最少,这样
CPU
缓存可以加载更多的程序 -
优化代理和拦截器
减少代码,例如:
HikariCP
的Statement proxy
只有 100 行代码,代码越少错误越少 -
自定义数组类型(
FastStatementList
)代替ArrayList
避免每次
get()
调用都要进行行range check
,避免调用remove
时从头到尾的扫描 -
自定义集合类型(
ConcurrentBag
)提高并发读写的效率
-
二、HikariCP 默认配置
- 参考来源:
com.zaxxer.hikari.HikariConfig
和com.zaxxer.hikari.pool.PoolBase
配置属性 | 属性描述 | 构造器默认值 | 翻译后的默认值 | Validate 重置 |
---|---|---|---|---|
autoCommit | 自动提交从池中返回的连接 | true | true | - |
connectionTimeout | 等待来自池的最大毫秒数 | SECONDS.toMillis(30) | 30000 | 如果小于250毫秒,则被重置回30秒 |
idleTimeout | 连接允许在池中闲置的最长时间 | MINUTES.toMillis(10) | 600000 | 如果idleTimeout+1秒 > maxLifetime 且 maxLifetime > 0,则会被重置为0 (代表永远不会退出), 如果idleTimeout != 0且小于10秒, 则会被重置为10秒 |
maxLifetime | 池中连接最长生命周期 | MINUTES.toMillis(30) | 1800000 | 如果不等于0且小于30秒 则会被重置回30分钟 |
connectionTestQuery | 如果您的驱动程序支持JDBC4, 我们强烈建议您不要设置此属性 | null | null | - |
minimumIdle | 池中维护的最小空闲连接数 | -1 | 10 | minIdle 小于0 或者 minIdle 大于 maxPoolSize, 则被重置为 maxPoolSize |
maximumPoolSize | 池中最大连接数,包括闲置和使用中的连接 | -1 | 10 | 如果 maxPoolSize 小于 1, 则会被重置。 当 minIdle <= 0被重置为 DEFAULT_POOL_SIZE 则为10, 如果 minIdle > 0 则重置为 minIdle 的值 |
metricRegistry | 该属性允许您指定一个 Codahale / Dropwizard MetricRegistry 的实例, 供池使用以记录各种指标 | null | null | - |
healthCheckRegistry | 该属性允许您指定池使用的 Codahale / Dropwizard HealthCheckRegistry 的实例来报告当前健康信息 | null | null | - |
poolName | 连接池的用户定义名称,主要出现在日志记录和 JMX 管理控制台中以识别池和池配置 | null | HikariPool-1 | - |
initializationFailTimeout | 如果池无法成功初始化连接, 则此属性控制池是否将 fail fast | 1 | 1 | - |
isolateInternalQueries | 是否在其自己的事务中隔离内部池查询, 例如连接活动测试 | false | false | - |
allowPoolSuspension | 控制池是否可以通过 JMX 暂停和恢复 | false | false | - |
readOnly | 从池中获取的连接是否默认处于只读模式 | false | false | - |
registerMbeans | 是否注册 JMX 管理 Bean(MBeans) | false2 | false | - |
catalog | 为支持 catalog 概念的数据库设置默认 catalog | driver default | null | - |
connectionInitSql | 该属性设置一个SQL语句,在将每个新连接创建后, 将其添加到池中之前执行该语句 | null | null | - |
driverClassName | HikariCP 将尝试通过仅基于 jdbcUrl 的 DriverManager 解析驱动程序, 但对于一些较旧的驱动程序,还必须指定 driverClassName | null | null | - |
transactionIsolation | 控制从池返回的连接的默认事务隔离级别 | null | null | - |
validationTimeout | 连接将被测试活动的最大时间量 | SECONDS.toMillis(5) | 5000 | 如果小于250毫秒,则会被重置回5秒 |
scheduledExecutor | 此属性允许您设置将用于各种内部计划任务的 java.util.concurrent.ScheduledExecutorService 实例 | null | null | - |
threadFactory | 此属性允许您设置将用于创建池使用的所有线程的 java.util.concurrent.ThreadFactory 的实例 | null | null | - |
schema | 该属性为支持模式概念的数据库设置默认模式 | driver default | null | - |
dataSource | 这个属性允许你直接设置数据源的实例被池包装, 而不是让 HikariCP 通过反射来构造它 | null | null | - |
leakDetectionThreshold | 记录消息之前连接可能离开池的时间量, 表示可能的连接泄漏 | 0 | 0 | 如果大于0且不是单元测试, 则进一步判断:(leakDetectionThreshold < SECONDS.toMillis(2) or (leakDetectionThreshold > maxLifetime && maxLifetime > 0), 会被重置为0 . 即如果要生效则必须>0,而且不能小于2秒, 而且当maxLifetime > 0时不能大于maxLifetime |