Springboot默认数据源Hikari的配置详解(转)
【转发⾃:】
基本概念
在开始说明Spring Boot中的数据源配置之前,我们先搞清楚关于数据访问的这些基本概念:
什么是JDBC?
Java数据库连接(Java Database Connectivity,简称JDBC)是Java语⾔中⽤来规范客户端程序如何来访问数据库的应⽤程序接⼝,提供了诸如查询和更新数据库中数据的⽅法。JDBC也是Sun Microsystems的商标。我们通常说的JDBC是⾯向关系型数据库的。
JDBC API主要位于JDK中的java.sql包中(之后扩展的内容位于javax.sql包中),主要包括(斜体代表接⼝,需驱动程序提供者来具体实现):
DriverManager:负责加载各种不同驱动程序(Driver),并根据不同的请求,向调⽤者返回相应的数据库连接(Connection)。
Driver:驱动程序,会将⾃⾝加载到DriverManager中去,并处理相应的请求并返回相应的数据库连接(Connection)。
Connection:数据库连接,负责与进⾏数据库间通讯,SQL执⾏以及事务处理都是在某个特定Connection环境中进⾏的。可以产⽣⽤以执⾏SQL的Statement。
Statement:⽤以执⾏SQL查询和更新(针对静态SQL语句和单次执⾏)。PreparedStatement:⽤以执⾏包含动态参数的SQL查询和更新(在服务器端编译,允许重复执⾏以提⾼效率)。
CallableStatement:⽤以调⽤数据库中的存储过程。
SQLException:代表在数据库连接的建⽴和关闭和SQL语句的执⾏过程中发⽣了例外情况(即错误)。
什么是数据源?
可以看到,在java.sql中并没有数据源(Data Source)的概念。这是由于在java.sql中包含的是JDBC内核API,另外还有个javax.sql包,其中包含了JDBC标准的扩展API。⽽关于数据源(Data Source)的定义,就在javax.sql这个扩展包中。
实际上,在JDBC内核API的实现下,就已经可以实现对数据库的访问了,那么我们为什么还需要数据源呢?主要出于以下⼏个⽬的:
1. 封装关于数据库访问的各种参数,实现统⼀管理
2. 通过对数据库的连接池管理,节省开销并提⾼效率
在Java这个⾃由开放的⽣态中,已经有⾮常多优秀的开源数据源可以供⼤家选择,⽐如:DBCP、C3P0、Druid、HikariCP等。
⽽在Spring Boot 2.x中,对数据源的选择也紧跟潮流,采⽤了⽬前性能最佳的。接下来,我们就来具体说说,这个Spring Boot中的默认数据源配置。
默认数据源:HikariCP
由于Spring Boot的⾃动化配置机制,⼤部分对于数据源的配置都可以通过配置参数的⽅式去改变。只有⼀些特殊情况,⽐如:更换默认数据源,多数据源共存等情况才需要去修改覆盖初始化的Bean内容。本节我们主要讲Hikari的配置,所以对于使⽤其他数据源或者多数据源的情况,在之后的教程中学习。
在Spring Boot⾃动化配置中,对于数据源的配置可以分为两类:
通⽤配置:以spring.datasource.*的形式存在,主要是对⼀些即使使⽤不同数据源也都需要配置的⼀些常规内容。⽐如:数据库链接地址、⽤户名、密码等。这⾥就不做过多说明了,通常就这些配置:
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.sql.jdbc.Driver
复制代码
数据源连接池配置:以spring.datasource.<;数据源名称>.*的形式存在,⽐如:Hikari的配置参数就是spring.datasource.hikari.*形式。下⾯这个是我们最常⽤的⼏个配置项及对应说明:
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.idle-timeout=500000
spring.datasource.hikari.max-lifetime=540000
spring.tion-timeout=60000
spring.tion-test-query=SELECT 1
复制代码
这些配置的含义:
spring.datasource.hikari.minimum-idle: 最⼩空闲连接,默认值10,⼩于0或⼤于maximum-pool-size,都会重置为maximum-pool-size spring.datasource.hikari.maximum-pool-size: 最⼤连接数,⼩于等于0会被重置为默认值10;⼤于零⼩于1会被重置为minimum-idle的值
spring.datasource.hikari.idle-timeout: 空闲连接超时时间,默认值600000(10分钟),⼤于等于max-lifetime且max-lifetime>0,会被重置为0;不等于0且⼩于10秒,会被重置为10秒。
spring.datasource.hikari.max-lifetime: 连接最⼤存活时间,不等于0且⼩于30秒,会被重置为默认值30分钟.设置应该⽐mysql设置的超时时间短
spring.tion-timeout: 连接超时时间:毫秒,⼩于250毫秒,否则被重置为默认值30秒
spring.tion-test-query: ⽤于测试连接是否可⽤的查询语句
更多完整配置项可查看下表:
name描述构造器默认值默认配置
validate之
后的值
validate重置
autoCommit⾃动提交从池中返回的连接TRUE TRUE–
connectionTimeout等待来⾃池的连接的最⼤毫秒数Millis(30)
= 30000
30000如果⼩于250毫秒,则被重置
回30秒
idleTimeout连接允许在池中闲置的最长时间Millis(10)
= 600000
600000
如果idleTimeout+1秒
>maxLifetime 且
maxLifetime>0,则会被重置
为0(代表永远不会退出);
如果idleTimeout!=0且⼩于10
秒,则会被重置为10秒
maxLifetime池中连接最长⽣命周期Millis(30)
= 1800000
1800000如果不等于0且⼩于30秒则会
被重置回30分钟
connectionTestQuery如果您的驱动程序⽀持JDBC4,我们强烈建议
您不要设置此属性
null null–
minimumIdle池中维护的最⼩空闲连接数-110minIdle<0或者
minIdle>maxPoolSize,则被重置为maxPoolSize
maximumPoolSize池中最⼤连接数,包括闲置和使⽤中的连接-110如果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
11–
isolateInternalQueries是否在其⾃⼰的事务中隔离内部池查询,例如
连接活动测试
FALSE FALSE–allowPoolSuspension控制池是否可以通过JMX暂停和恢复FALSE FALSE–readOnly从池中获取的连接是否默认处于只读模式FALSE FALSE–registerMbeans是否注册JMX管理Bean(MBeans)FALSE FALSE–catalog为⽀持 catalog 概念的数据库设置默认 catalog driver default null–
connectionInitSql该属性设置⼀个SQL语句,在将每个新连接创
建后,将其添加到池中之前执⾏该语句。
null null–
driverClassName HikariCP将尝试通过仅基于jdbcUrl的
DriverManager解析驱动程序,但对于⼀些较旧
的驱动程序,还必须指定driverClassName
null null–
transactionIsolation控制从池返回的连接的默认事务隔离级别null null–
validationTimeout连接将被测试活动的最⼤时间量Millis(5)
= 5000
5000如果⼩于250毫秒,则会被重
置回5秒
leakDetectionThreshold记录消息之前连接可能离开池的时间量,表⽰
可能的连接泄漏00
如果⼤于0且不是单元测试,
则进⼀步判断:
(leakDetectionThreshold <
spring out 是什么意思
(leakDetectionThreshold >
maxLifetime && maxLifetime
> 0),会被重置为0 . 即如果要
⽣效则必须>0,⽽且不能⼩于
2秒,⽽且当maxLifetime > 0
时不能⼤于maxLifetime dataSource这个属性允许你直接设置数据源的实例被池包
装,⽽不是让HikariCP通过反射来构造它
null null–
schema该属性为⽀持模式概念的数据库设置默认模式driver default null–
threadFactory 此属性允许您设置将⽤于创建池使⽤的所有线
程的urrent.ThreadFactory的实
例。
null null–
scheduledExecutor 此属性允许您设置将⽤于各种内部计划任务的
urrent.ScheduledExecutorService
实例
null null–
name描述构造器默认值默认配置
validate之
后的值
validate重置
代码⽰例参考资料

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。