[英]Configuring hikari connection pool
我的数据库有以下设置(我有多个数据库,所以它们是在spring.datasource
层次结构中配置的。
spring:
datasource:
db-write:
url: jdbc:sqlserver://whatever.database.windows.net:1433;database=dbname;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;
username: 'myusername'
password: 'mynotsosecretpassword'
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
然后我在这里配置我的数据源
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.datasources.dbwrite.repository",
entityManagerFactoryRef = "entityManagerFactoryDbWrite",
transactionManagerRef= "transactionManagerDbWrite"
)
public class DataSourceConfigurationDbWrite {
@Bean
@Primary
@ConfigurationProperties("spring.datasource.db-write")
public DataSourceProperties dataSourcePropertiesDbWrite() {
return new DataSourceProperties();
}
@Bean
@Primary
@ConfigurationProperties("spring.datasource.db-write.configuration")
public DataSource dataSourceDbWrite() {
return dataSourcePropertiesDbWrite().initializeDataSourceBuilder()
.type(HikariDataSource.class).build();
}
@Primary
@Bean(name = "entityManagerFactoryDbWrite")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryDbWrite(EntityManagerFactoryBuilder builder) {
return builder
.dataSource(dataSourceDbWrite())
.packages("com.datasources.dbwrite.models")
.build();
}
@Primary
@Bean
public PlatformTransactionManager transactionManagerDbWrite(
final @Qualifier("entityManagerFactoryDbWrite") LocalContainerEntityManagerFactoryBean entityManagerFactoryDbWrite) {
return new JpaTransactionManager(Objects.requireNonNull(entityManagerFactoryDbWrite.getObject()));
}
}
我正在根据我在dataSourcePropertiesDbWrite
方法中读取的属性在dataSourceDbWrite
方法中配置我的 hikari 数据源。 我相信我需要在特定层次结构中配置属性,以便dataSourceDbWrite
方法可以轻松检测hikari
需要哪些属性。 那是对的吗?
那个层次结构会是什么?
此外,我如何以及在哪里可以找到我可以为 hikari 配置的属性? 连接超时? 连接池大小等?
我个人更喜欢application.yml
而不是配置 Hikari 的代码:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: {JDBC URL}
username: {USERNAME}
password: {PASSWORD}
type: com.zaxxer.hikari.HikariDataSource
hikari:
minimum-idle: 5
idle-timeout: 600000
maximum-pool-size: 10
auto-commit: true
pool-name: HikariCorePool
max-lifetime: 1800000
connection-timeout: 30000
connection-test-query: select * from information_schema.tables limit 1
(顺便说一句,那段配置最初是一位同事多年前编写的。那些年我们没有更改它,只是复制并粘贴到任何新项目中。😆)
如果您想查看所有可配置字段, org.springframework.boot:spring-boot-autoconfigure:{VERSION}/META-INF/spring/spring-configuration-metadata.json
中的那些spring.datasource.hikari.*
键可能有帮助。
com.zaxxer.hikari.HikariConfigMXBean
中的 javadoc 也可以提供帮助。
请参阅文章中的示例,属性层次结构根据@ConfigurationProperties
的值
如果我们想配置 Hikari,我们只需要在数据源定义中添加一个@ConfigurationProperties:
@Bean @ConfigurationProperties("spring.datasource.todos.hikari") public DataSource todosDataSource() { return todosDataSourceProperties() .initializeDataSourceBuilder() .build(); }
然后,我们可以将以下行插入到 application.properties 文件中:
spring.datasource.todos.hikari.connectionTimeout=30000 spring.datasource.todos.hikari.idleTimeout=600000 spring.datasource.todos.hikari.maxLifetime=1800000
查看相关 hikari 的弹簧特性
spring.datasource.hikari.connection-timeout
spring.datasource.hikari.data-source-class-name
spring.datasource.hikari.data-source-properties
spring.datasource.hikari.driver-class-name
spring.datasource.hikari.idle-timeout
spring.datasource.hikari.initialization-fail-timeout
spring.datasource.hikari.jdbc-url
spring.datasource.hikari.leak-detection-threshold
spring.datasource.hikari.login-timeout
spring.datasource.hikari.max-lifetime
spring.datasource.hikari.maximum-pool-size
spring.datasource.hikari.minimum-idle
spring.datasource.hikari.validation-timeout
并解释HikariCP中的每个属性,例如
connectionTimeout此属性控制客户端(即您)将等待来自池的连接的最大毫秒数。 如果在没有可用连接的情况下超过此时间,将引发 SQLException。 可接受的最低连接超时为 250 毫秒。 默认值:30000(30 秒)
请注意,camelCase hikari 属性(connectionTimeout)在 spring 中显示为蛇形(connection-timeout)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.