SpringBoot数据库连接池——HikariCP
本⽂介绍 Spring Boot 2 配置 HikariCP 数据库连接池的⽅法。
⽬录
HikariCP 简介
Spring Boot HikariCP
配置项说明
开发环境
代码⽰例
HikariCP 简介
HikariCP 是⼀个⾮常轻量级(130 KB 左右)且效率很⾼的 JDBC 连接池框架。
与已有的其它 JDBC 连接池技术(c3p0、dbcp2、tomcat、druid)相⽐,HikariCP 的速度⾮常快,因为它采⽤了以下技术:
字节码精简:优化代码,直⾄编译后的字节码最少;
优化代理和:减少代码量,如:HikariCP 的 Statement proxy 只有 100 ⾏,是 BoneCP 的⼗分之⼀;
⾃定义集合类型 FastStatementList 代替 ArrayList<Statement>:避免每次 get() 调⽤都进⾏范围检查,避免调⽤ remove() 时从头到尾扫描;
⾃定义集合类型 ConcurrentBag:提⾼并发读写效率;
其他的⼀些微观优化:尽管⼏乎⽆法衡量,但这些优化相结合可提⾼整体性能。
Spring Boot HikariCP
Spring Boot 在 1.x 版本中默认使⽤ Tomcat JDBC 连接池,但到了 2.x 版本后就将 HikariCP 作为默认的数据库连接池(spring-boot-starter-jdbc 中包含了 HikariCP 连接池)。
Spring Boot 按照如下规则选⽤数据库连接池实现:
1. 考虑到性能和并发,Spring Boot 优先使⽤ HikariCP;
2. 其次选择 Tomcat 数据连接池;
3. 如果 HikariCP 和 Tomcat 数据连接池都不可⽤,⽽ Commons DBCP2 可⽤,那么选择 Commons DBCP2。
可以通过设置 pe 属性绕过以上规则。
配置项说明
配置项:allow-pool-suspension
类型:java.lang.Boolean
构造器默认值:false
默认配置 validate 后的值:false
说明:控制池是否可以通过 JMX 暂停和恢复。
配置项:auto-commit
类型:java.lang.Boolean
构造器默认值:true
默认配置 validate 后的值:true
说明:⾃动提交从池中返回的连接。
配置项:catalog
类型:java.lang.String
构造器默认值:数据库驱动默认
默认配置 validate 后的值:null
说明:为⽀持 catalog 概念的数据库设置默认 catalog。
配置项:connection-init-sql
类型:java.lang.String
构造器默认值:null
默认配置 validate 后的值:null
说明: 该属性设置⼀个SQL语句,在将每个新连接创建后,将其添加到池中之前执⾏该语句。
配置项:connection-test-query
类型:java.lang.String
构造器默认值:
默认配置 validate 后的值:
说明:如果驱动程序⽀持 JDBC4,强烈建议不要设置此属性。
配置项:connection-timeout
类型:java.lang.Long
构造器默认值:Millis(30) = 30000
默认配置 validate 后的值:30000
说明:等待来⾃池的连接的最⼤毫秒数,如果⼩于 250 毫秒,则被重置回 30 秒。
配置项:data-source-class-name
类型:java.lang.String
构造器默认值:
默认配置 validate 后的值:
说明:
配置项:data-source-j-n-d-i
类型:java.util.Properties
构造器默认值:
默认配置 validate 后的值:
说明:
配置项:driver-class-name
类型:java.lang.String
构造器默认值:null
默认配置 validate 后的值:null
说明:HikariCP 将尝试通过仅基于 jdbcUrl 的 DriverManager 解析驱动程序,但对于⼀些较旧的驱动程序, 还必须指定 driverClassName。
配置项:health-check-properties.
类型:java.util.Properties
构造器默认值:
默认配置 validate 后的值:
说明:
配置项:health-check-registry
类型:java.lang.Object
构造器默认值:
默认配置 validate 后的值:
说明:该属性允许指定池使⽤的 Codahale / Dropwizard HealthCheckRegistry 的实例来报告当前健康信息。
配置项:idle-timeout
类型:java.lang.Long
validation框架构造器默认值:Millis(10) = 600000
默认配置 validate 后的值:600000
说明:连接允许在池中闲置的最长时间。如果 idleTimeout + 1 秒 > maxLifetime 且 maxLifetime > 0,则会被重置为 0(代表永远不会退出);如果 idleTimeout != 0 且⼩于 10 秒,则会被重置为 10 秒。
配置项:initialization-fail-timeout
类型:java.lang.Long
构造器默认值:1
默认配置 validate 后的值:1
说明:如果池⽆法成功初始化连接,则此属性控制池是否将 fail fast。
配置项:isolate-internal-queries
类型:java.lang.Boolean
构造器默认值:false
默认配置 validate 后的值:false
说明:是否在其⾃⼰的事务中隔离内部池查询,例如连接活动测试。
配置项:jdbc-url
类型:java.lang.String
构造器默认值:
默认配置 validate 后的值:
说明:
配置项:leak-detection-threshold
类型:java.lang.Long
构造器默认值:0
默认配置 validate 后的值:0
说明:记录消息之前连接可能离开池的时间量,表⽰可能的连接泄漏。如果⼤于 0 且不是单元测试,则进⼀步判断:(leakDetectionThreshold <
配置项:login-timeout
类型:java.lang.Integer
构造器默认值:
默认配置 validate 后的值:
说明:
配置项:max-lifetime
类型:java.lang.Long
构造器默认值:Millis(30) = 1800000
默认配置 validate 后的值:1800000
说明:池中连接最长⽣命周期,如果不等于 0 且⼩于 30 秒则会被重置回 30 分钟。
配置项:maximum-pool-size
类型:java.lang.Integer
构造器默认值:-1
默认配置 validate 后的值:10
说明:池中最⼤连接数,包括闲置和使⽤中的连接。如果⼩于 1,则会被重置。当 minIdle <= 0 被重置为 DEFAULT_POOL_SIZE 则为 10,如果minIdle > 0 则重置为 minIdle 的值。
metric-registry | java.lang.Object | | | 该属性允许指定⼀个 Codahale / Dropwizard MetricRegistry 的实例,供池使⽤以记录各种指标。
配置项:metrics-tracker-factory
类型:com.ics.MetricsTrackerFactory
构造器默认值:
默认配置 validate 后的值:
说明:
配置项:minimum-idle
类型:java.lang.Integer
构造器默认值:-1
默认配置 validate 后的值:10
说明:池中维护的最⼩空闲连接数,如果⼩于 0 或⼤于 maximum-pool-size 则被重置为 maximum-pool-size。
配置项:password
类型:java.lang.String
构造器默认值:
默认配置 validate 后的值:
说明:
配置项:pool-name
类型:java.lang.String
构造器默认值:null
默认配置 validate 后的值:HikariPool-1
说明:连接池的⽤户定义名称,主要出现在⽇志记录和 JMX 管理控制台中以识别池和池配置。
配置项:read-only
类型:java.lang.Boolean
构造器默认值:false
默认配置 validate 后的值:false
说明:从池中获取的连接是否默认处于只读模式。
配置项:register-mbeans
类型:java.lang.Boolean
构造器默认值:false
默认配置 validate 后的值:false
说明:是否注册JMX管理Bean(MBeans)。
配置项:scheduled-executor
类型:urrent.ScheduledExecutorService
构造器默认值:null
默认配置 validate 后的值:null
说明:此属性允许您设置将⽤于各种内部计划任务的 urrent.ScheduledExecutorService 实例。
配置项:schema
类型:java.lang.String
构造器默认值:数据库驱动默认
默认配置 validate 后的值:null
说明:该属性为⽀持模式概念的数据库设置默认模式。
配置项:transaction-isolation
类型:java.lang.String
构造器默认值:null
默认配置 validate 后的值:null
说明:控制从池返回的连接的默认事务隔离级别。
配置项:username
类型:java.lang.String
构造器默认值:
默认配置 validate 后的值:
说明:
配置项:validation-timeout
类型:java.lang.Long
构造器默认值:Millis(5) = 5000
默认配置 validate 后的值:5000
说明:连接将被测试活动的最⼤时间量,如果⼩于 250 毫秒,则会被重置回 5 秒。
开发环境
JDK 8
MySQL 8.x
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论