2 个具有不同数据源配置的 Hikari CP?

ram*_*ris 5 db2 informix spring-data-jpa spring-boot hikaricp

有没有人在 Spring Boot 应用程序中成功配置了两个具有不同数据源的 hikari 连接池?如何使用 application.properties 来做到这一点?

小智 6

我知道这个问题很久以前就被问过,但我认为这可能对其他人有帮助。另外,我不认为上面提到的“可能的重复”回答了这个问题。

我正在使用 Spring Boot 2.0.4 和 Maven。而不是像使用一个数据库那样为 hikary 指定一个专用范围,例如

  datasource:
      hikari:
            connection-test-query: SELECT 1 FROM DUAL
            minimum-idle: 1
            maximum-pool-size: 2
            pool-name: some-pool-name
Run Code Online (Sandbox Code Playgroud)

您可以采用所需的设置并将其直接放入数据库范围内,例如:

spring:
    datasource:
        db1:
            type: com.zaxxer.hikari.HikariDataSource
            maximum-pool-size: 2
            minimum-idle: 1
            pool-name: db1-pool
            connection-test-query: SELECT 1 FROM DUAL
            jdbc-url: jdbc:mysql://${host1}:${port1}/${db1}
            username: ${db1-user}
            password: ${db1-pass}
            driver-class-name: com.mysql.cj.jdbc.Driver
        db2:
            type: com.zaxxer.hikari.HikariDataSource
            maximum-pool-size: 2
            minimum-idle: 1
            pool-name: db2-pool
            connection-test-query: SELECT 1 FROM DUAL
            jdbc-url: jdbc:mysql://${host2}:${port2}/${db2}
            username: ${db2-user}
            password: ${db2-pass}
            driver-class-name: com.mysql.cj.jdbc.Driver
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,池名称和大小是在该范围内设置的。

然后在java配置文件中:

@Configuration
public class AppConfiguration {

....

    @Bean("db1")
    @ConfigurationProperties(prefix = "spring.datasource.db1")
    public DataSource firstDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean("db2")
    @ConfigurationProperties(prefix = "spring.datasource.db1")
    public DataSource secondDataSource() {
        return DataSourceBuilder.create().build();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 但为什么“hikari”前缀突然消失了? (2认同)