配置文件:
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: 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: 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
|