繁体   English   中英

配置 hikari 连接池

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM