HikariCP是一个高性能的Java连接池库,用于管理数据库连接。它专为高并发和低延迟的应用程序设计,提供了可靠、稳定且高效的连接池解决方案。
其是SpringBoot默认的数据库连接池
介绍
HikariCP是一个快速、高效和可靠的Java连接池库,适用于需要处理大量数据库操作的应用程序。它被广泛应用于各种Java项目,包括Web应用程序、大数据处理、微服务等
主要特点和优势如下:
官网地址:github.com/brettwooldr…
可以在官网上看到性能对比:
- 一个连接周期定义为单个
DataSource.getConnection()
/Connection.close()
。 - 一个语句循环被定义为单个
Connection.prepareStatement()
,Statement.execute()
,Statement.close()
。
参数配置
HikariCP 具有合理的默认设置,无需额外调整即可在大多数部署中表现良好。但有些必填项需要填写
必填参数项
参数项 | 说明 | 默认值 |
---|---|---|
dataSourceClassName | 这是JDBC 驱动程序提供的类dataSourceClassName 的名称。DataSource 请查阅特定 JDBC 驱动程序的文档以获取此类名称 |
无 |
jdbcUrl | 该属性指示 HikariCP 使用“基于 DriverManager”的配置。我们认为基于数据源的配置(上面)由于多种原因(见下文)更优越,但对于许多部署来说几乎没有显着差异。 当将此属性与“旧”驱动程序一起使用时,您可能还需要设置该 driverClassName 属性,但首先尝试不设置该属性。 其与dataSourceClassName配置二选一 |
无 |
username | 连接用户名,该属性设置从底层驱动获取Connectionsusername 时使用的默认身份验证用户名。 |
无 |
password | 该属性设置从底层驱动获取Connectionspassword 时使用的默认身份验证密码。 |
无 |
经常使用参数
参数项 | 说明 | 默认值 |
---|---|---|
autoCommit | 此属性控制从池返回的连接的默认自动提交行为。它是一个布尔值。 | true |
connectionTimeout | 此属性控制客户端(即您)等待来自池的连接的最大毫秒数。如果超过此时间而没有可用连接,则会抛出 SQLException。可接受的最低连接超时为 250 毫秒。 | 30000(30 秒) |
idleTimeout | 此属性控制允许连接在池中空闲的最长时间。 此设置仅在定义为小于 **时适用。minimumIdle``maximumPoolSize **一旦池达到 连接数,空闲连接就不会minimumIdle 被收回。连接是否因空闲而退出,最大变化为 +30 秒,平均变化为 +15 秒。在此超时之前, 连接永远不会因空闲而退出。值 0 表示永远不会从池中删除空闲连接。允许的最小值为 10000 毫秒(10 秒) |
600000(10 分钟) |
keepaliveTime | 此属性控制 HikariCP 尝试保持连接活动的频率,以防止数据库或网络基础设施超时。该值必须小于该 maxLifetime 值。“保持活动”只会发生在空闲连接上。当针对给定连接的“保持活动”时间到达时,该连接将从池中删除、“ping”,然后返回到池中。“ping”是以下之一:调用 JDBC4isValid() 方法,或执行 connectionTestQuery 。通常,池外的持续时间应以个位数毫秒甚至亚毫秒为单位进行测量,因此应该很少或没有明显的性能影响。允许的最小值为 30000 毫秒(30 秒),但分钟范围内的值是最理想的。 |
0(禁用) |
maxLifetime | 该属性控制池中连接的最长生命周期。正在使用的连接永远不会退休,只有当它关闭时才会被删除。在逐个连接的基础上,应用较小的负衰减以避免池中的大规模灭绝。 我们强烈建议设置此值,它应该比任何数据库或基础设施施加的连接时间限制短几秒。 值 0 表示没有最大寿命(无限寿命),当然取决于设置idleTimeout 。允许的最小值为 30000 毫秒(30 秒) |
1800000(30 分钟) |
connectionTestQuery | 如果您的驱动程序支持 JDBC4,我们强烈建议不要设置此属性。 这适用于不支持 JDBC4 的“旧版”驱动程序Connection.isValid() API 。这是在从池中向您提供连接之前执行的查询,以验证与数据库的连接是否仍然有效。再次尝试在没有此属性的情况下运行池,如果您的驱动程序不兼容 JDBC4,HikariCP 将记录一条错误来通知您。 |
无 |
minimumIdle | 最小空闲连接数。 如果空闲连接低于此值并且池中的总连接数小于maximumPoolSize ,HikariCP 将尽最大努力快速有效地添加额外连接。但是,为了获得最大性能和对高峰需求的响应能力,我们建议不要设置此值,而是允许 HikariCP 充当固定大小的连接池。 |
与 MaximumPoolSize 相同 |
maximumPoolSize | 此属性控制池允许达到的最大大小,包括空闲连接和正在使用的连接。基本上这个值将决定到数据库后端的实际连接的最大数量。合理的值最好由您的执行环境决定。connectionTimeout 当池达到此大小并且没有可用的空闲连接时,对 getConnection() 的调用将在超时之前阻塞长达几毫秒。请阅读有关池大小的信息 |
10 |
metricRegistry | 此属性只能通过编程配置或 IoC 容器使用。此属性允许您指定池使用的Codahale/Dropwizard 实例来记录各种指标。MetricRegistry 有关详细信息,请参阅Metrics wiki 页面。 |
无 |
healthCheckRegistry | 此属性只能通过编程配置或 IoC 容器使用。此属性允许您指定池使用的Codahale/Dropwizard 实例来报告当前运行状况信息。 有关详细信息, HealthCheckRegistry 请参阅健康检查wiki 页面。 |
无 |
poolName | 该属性表示连接池的用户定义名称,主要出现在日志记录和 JMX 管理控制台中,用于标识池和池配置。 | 自动生成 |
不长使用参数
参考官网查看
initializationFailTimeout
isolateInternalQueries
allowPoolSuspension
readOnly
registerMbeans
catalog
connectionInitSql
driverClassName
transactionIsolation
validationTimeout
leakDetectionThreshold
dataSource
schema
threadFactory
scheduledExecutor
基于Spring Boot配置实例
直接在之前sharding-jdbc分库分表修改,地址如下:github.com/hongyuwen/H…
只要改动sharding-databases-tables.yaml文件:
dataSources:
# ds_1:
# dataSourceClassName: com.alibaba.druid.pool.DruidDataSource
# driverClassName: com.mysql.jdbc.Driver
# url: jdbc:mysql://172.17.108.172:3306/point_shard1?autoReconnect=true&characterEncoding=UTF-8&useUnicode=true&connectTimeout=3000&socketTimeout=3000
# username: root
# password: -
ds_1:
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.jdbc.Driver
jdbcUrl: jdbc:mysql://172.17.108.172:3306/point_shard1?autoReconnect=true&characterEncoding=UTF-8&useUnicode=true&connectTimeout=3000&socketTimeout=3000
username: root
password: -
connectionTimeout: 3000
idleTimeout: 600000
keepaliveTime: 30000
maxLifetime: 1800000
minimumIdle: 10
maximumPoolSize: 10
poolName: ds_1
启动打印日志如下
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|HikariPool-2 - configuration:|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|allowPoolSuspension................................false|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|autoCommit................................true|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|catalog................................none|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|connectionInitSql................................none|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|connectionTestQuery................................none|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|connectionTimeout................................3000|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|dataSource................................none|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|dataSourceClassName................................none|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|dataSourceJNDI................................none|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|dataSourceProperties................................{cacheServerConfiguration=true, useServerPrepStmts=true, elideSetAutoCommits=true, cacheResultSetMetadata=false, rewriteBatchedStatements=true, useSSL=false, cachePrepStmts=true, useLocalSessionState=true, maintainTimeStats=false, prepStmtCacheSize=8192, tinyInt1isBit=false, prepStmtCacheSqlLimit=2048, serverTimezone=UTC, password=, zeroDateTimeBehavior=round, netTimeoutForStreamingResults=0}|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|driverClassName................................none|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|exceptionOverrideClassName................................none|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|healthCheckProperties................................{}|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|healthCheckRegistry................................none|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|idleTimeout................................600000|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|initializationFailTimeout................................1|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|isolateInternalQueries................................false|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|jdbcUrl................................jdbc:mysql://172.17.108.172:3306/point_shard1?autoReconnect=true&characterEncoding=UTF-8&useUnicode=true&connectTimeout=3000&socketTimeout=3000|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|keepaliveTime................................30000|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|leakDetectionThreshold................................0|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|maxLifetime................................1800000|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|maximumPoolSize................................10|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|metricRegistry................................none|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|metricsTrackerFactory................................none|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|minimumIdle................................10|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|password................................|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|poolName................................"HikariPool-2"|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|readOnly................................false|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|registerMbeans................................false|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|scheduledExecutor................................none|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|schema................................none|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|threadFactory................................internal|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|transactionIsolation................................default|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|username................................"root"|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|validationTimeout................................5000|com.zaxxer.hikari.HikariConfig
2023-09-27 21:58:37.716|INFO |demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|HikariPool-2 - Starting...|com.zaxxer.hikari.HikariDataSource
2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|Loaded driver with class name com.mysql.jdbc.Driver for jdbcUrl=jdbc:mysql://172.17.108.172:3306/point_shard1?autoReconnect=true&characterEncoding=UTF-8&useUnicode=true&connectTimeout=3000&socketTimeout=3000|com.zaxxer.hikari.util.DriverDataSource
2023-09-27 21:58:37.733|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@5822ecda|com.zaxxer.hikari.pool.HikariPool
2023-09-27 21:58:37.733|INFO |demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|HikariPool-2 - Start completed.|com.zaxxer.hikari.HikariDataSource
2023-09-27 21:58:37.844|DEBUG|demo|46|127.0.0.1|db1f31625b254dda93850baff340437c|HikariPool-2 - Pool stats (total=1, active=0, idle=1, waiting=0)|com.zaxxer.hikari.pool.HikariPool
2023-09-27 21:58:37.845|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@fc2553a|com.zaxxer.hikari.pool.HikariPool
2023-09-27 21:58:37.845|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@7b40a7b4|com.zaxxer.hikari.pool.HikariPool
2023-09-27 21:58:37.861|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@5760e7cb|com.zaxxer.hikari.pool.HikariPool
2023-09-27 21:58:37.861|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@2ea16ba7|com.zaxxer.hikari.pool.HikariPool
2023-09-27 21:58:37.861|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@24546eed|com.zaxxer.hikari.pool.HikariPool
2023-09-27 21:58:37.861|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@67ba4378|com.zaxxer.hikari.pool.HikariPool
2023-09-27 21:58:37.877|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@49665e64|com.zaxxer.hikari.pool.HikariPool
2023-09-27 21:58:37.877|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@70fcf1b4|com.zaxxer.hikari.pool.HikariPool
2023-09-27 21:58:37.877|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@70ea9569|com.zaxxer.hikari.pool.HikariPool
2023-09-27 21:58:37.877|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - After adding stats (total=10, active=0, idle=10, waiting=0)|com.zaxxer.hikari.pool.HikariPool