整合Mysql项目:数据库连接池hikari配置信息

配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
spring:
datasource:
driverClassName: com.mysql.jdbc.Driver
username:
password:
url: jdbc:mysql://
hikari:
# 默认使用的hikari作为连接池,具体配置参考:https://github.com/brettwooldridge/HikariCP
poolName: hikariPool
minimumIdle: 10
maximumPoolSize: 10
connectionTimeout: 30000
idleTimeout: 30000
maxLifetime: 1800000
connectionTestQuery: SELECT 1

代码:

1
2
3
4
5
6
7
8
@Primary
@Bean(name = "mysqlDataSource")
@ConfigurationProperties(prefix = "spring.datasource.hikari")
public DataSource mysqlDataSource(DataSourceProperties dataSourceProperties) {
return dataSourceProperties.initializeDataSourceBuilder()
.type(HikariDataSource.class)
.build();
}

这里需要注意,dataSourceProperties是spring容器自动加载的,

1
2
@ConfigurationProperties(prefix = "spring.datasource")
public class DataSourceProperties implements BeanClassLoaderAware, InitializingBean

主要用了 driverClassName、url、username、password等参数。

通过上面的例子创建DataSource并指定type的话,就会把dataSourceProperties的参数传给HikariDataSource。否则就需要这样搞:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
spring:
datasource:
hikari:
# 默认使用的hikari作为连接池,具体配置参考:https://github.com/brettwooldridge/HikariCP
driverClassName: com.mysql.jdbc.Driver
username:
password:
jdbcUrl: jdbc:mysql://
poolName: hikariPool
minimumIdle: 10
maximumPoolSize: 10
connectionTimeout: 30000
idleTimeout: 30000
maxLifetime: 1800000
connectionTestQuery: SELECT 1

应该懂了吧。

@ConfigurationProperties(prefix = “spring.datasource.hikari”)
这个会把配置值赋 给返回的bean即HikariDataSource。是在bean实例化完之后处理的。

如果是多数据源配置,需要注意,参考:

https://blog.csdn.net/qq_17229141/article/details/128408860

https://docs.spring.io/spring-boot/docs/2.4.2/reference/htmlsingle/#howto-two-datasources

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76


###############################################hikari############################################
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
#指定数据库驱动名称,不支持XA data。如果使用jdbcUrl配置则不需要配置该值。默认值:none。
#参考https://github.com/brettwooldridge/HikariCP#popular-datasource-class-names
spring.datasource.hikari.dataSourceClassName=
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.hikari.autoCommit=true
#连接建立超时时间 单位ms 默认30000
spring.datasource.hikari.connectionTimeout=30000
#空闲连接超时时间 单位ms 最小10000(10s) 默认600000(10min)
#当minimumIdle小于maximumPoolSize时有效
#0 空闲连接永远不会被移除
spring.datasource.hikari.idleTimeout=30000
#最小空闲连接数,默认值maximumPoolSize。当空闲连接低于该值且总连接数低于maximumPoolSize时,HikariCP会立即添加连接来保证一个高效的性能
#但是,HikariCP 不建议配置该值,建议使用默认值,让HikariCP维护一个固定连接数的连接池来保持高效。
spring.datasource.hikari.minimumIdle=
#最大连接数(包含空闲和正在使用的连接),默认值10.当连接数达到该值时,新的连接申请会被阻塞直到超时。
spring.datasource.hikari.maximumPoolSize=10
#一个连接在连接池中的最长存活时间,正在被使用的链接如果超时会等到关闭后被移除
#最小30000ms (30 seconds). Default: 1800000 (30 minutes)
#0 连接永不超时
spring.datasource.hikari.maxLifetime=1800000
#连接测试查询语句,如果驱动支持JDBC4,强烈建议不配置该属性
#尝试不配置该属性来运行连接池,如果驱动不支持JDBC4,HikariCP会打出一个错误日志通知你。默认值:none
spring.datasource.hikari.connectionTestQuery=
#指标记录,默认:none。这个属性只适用于程序配置或ioc容器,允许你指定一个Codahale/Dropwizard MetricRegistry来记录指标。
#参考:https://github.com/brettwooldridge/HikariCP/wiki/Dropwizard-Metrics
spring.datasource.hikari.metricRegistry=
#健康检查,默认:none。允许你指定一个Codahale/Dropwizard HealthCheckRegistry来报告当前健康信息。
#参考https://github.com/brettwooldridge/HikariCP/wiki/Dropwizard-HealthChecks
spring.datasource.hikari.healthCheckRegistry=
#连接池名称。Default: auto-generated
spring.datasource.hikari.poolName=hikariPool

##########################HikariCP不常用的配置#####################
spring.datasource.hikari.initializationFailTimeout=1
#是否在其自己的事务中隔离内部池查询
#由于这些查询通常是只读查询,所以很少需要将它们封装在自己的事务中。
#此属性仅适用于禁用autoCommit的情况。默认值:false
spring.datasource.hikari.isolateInternalQueries=false
#连接池是否可以被JMX挂起和恢复。在挂起状态下,获取连接将不会超时,会被阻塞直到连接池恢复。,默认false。
spring.datasource.hikari.allowPoolSuspension=false
#指定从连接池获取到的连接在默认情况下是否是只读模式的。这个取决于数据库和应用,默认false。
spring.datasource.hikari.readOnly=false
#是否注册Mbeans,默认false。
spring.datasource.hikari.registerMbeans=false
#连接初始化sql。当一个连接被创建后,在放入连接池之前,执行这条语句来确认是否是有效连接。默认值none。
spring.datasource.hikari.connectionInitSql=
#支配驱动类名称,一般不需要配置,hikari会根绝jdbcUrl来解析使用响应的驱动,如果找不到会打印错误日志来通知你。
spring.datasource.hikari.driverClassName=com.mysql.jdbc.Driver
#指定从连接池获取到的连接的默认事务隔离级别。枚举值来自Connection class的常量。例如TRANSACTION_READ_COMMITTED, TRANSACTION_REPEATABLE_READ等。
#默认情况下是数据库的默认隔离级别。
#spring.datasource.hikari.transactionIsolation=
#连接测试超时时间。最小值250ms,不能超过connectionTimeout。默认值5000
spring.datasource.hikari.validationTimeout=5000
#连接离开连接池后一定时间,会通过日志记录可能存在连接泄漏。该属性配置的是这个时间。
#0 表示不启用连接泄漏检测。最小值是2000 单位ms。默认值0。
spring.datasource.hikari.leakDetectionThreshold=0
#指定数据源。你可以自己封装数据源,不用通过hikari来反射生成。
#配置了该属性后,dataSourceClassName和所有DataSource-specific的属性都会被忽略。
#spring.datasource.hikari.dataSource=
#指定hikari连接池创建线程的线程工厂。默认值none。ThreadFactory 实例
spring.datasource.hikari.threadFactory=
#提供ScheduledExecutorService 实例。HikariCP在setRemoveOnCancelPolicy(true)时会使用。默认值none。
spring.datasource.hikari.scheduledExecutor=
#为支持catalog的数据库设置默认的catalog,默认依赖于jdbc驱动。
spring.datasource.hikari.catalog=
#为支持schema的数据库设置默认的schema,默认依赖于jdbc驱动。
spring.datasource.hikari.schema=


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
hikari:
allowPoolSuspension: false
autoCommit: true
catalog: ''
connectionInitSql: ''
connectionTestQuery: ''
connectionTimeout: 30000
dataSourceClassName: ''
driverClassName: com.mysql.jdbc.Driver
healthCheckRegistry: ''
idleTimeout: 30000
initializationFailTimeout: 1
isolateInternalQueries: false
leakDetectionThreshold: 0
maxLifetime: 1800000.0
maximumPoolSize: 10
metricRegistry: ''
minimumIdle: ''
poolName: hikariPool
readOnly: false
registerMbeans: false
scheduledExecutor: ''
schema: ''
threadFactory: ''
validationTimeout: 5000
password: 123456
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF8&useSSL=false
username: root