Hikari-Spring Boot忽略了hikari属性

时间:2019-02-27 11:05:41

标签: spring-boot properties-file hikaricp

我有一个Spring Boot 2应用程序,其中有两个数据源。这两个数据源都可以工作,但是我无法更改属性,例如最大池大小,我的更改没有生效。

我正在我的application.properties文件中配置两个数据源;

spring.datasource.url=jdbc:sqlserver://server;databaseName=ProductionMetrics
spring.datasource.username=ProductionMeusernametricsUser
spring.datasource.password=password
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.hikari.maximum-pool-size=20

# Products
trwbi.datasource.url=jdbc:sqlserver://server;databaseName=TRWBI
trwbi.datasource.username=username
trwbi.datasource.password=password
trwbi.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
trwbi.datasource.hikari.maximum-pool-size=20

然后,我要像这样设置两个数据源;

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef = "defaultEntityManagerFactory",
        transactionManagerRef = "defaultTransactionManager",
        basePackages = {
                "com.domain.visualisation.shared.repository"
        }
)
public class DefaultDbConfig {

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

    @Primary
    @Bean(name = "defaultEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean
    entityManagerFactory(
            EntityManagerFactoryBuilder builder,
            @Qualifier("defaultDataSource") DataSource dataSource
    ) {
        return builder
                .dataSource(dataSource)
                .packages("com.domain.visualisation.shared.entities")
                .persistenceUnit("default")
                .build();
    }

    @Primary
    @Bean(name = "defaultTransactionManager")
    public PlatformTransactionManager defaultTransactionManager(
            @Qualifier("defaultEntityManagerFactory") EntityManagerFactory defaultEntityManagerFactory
    ) {
        return new JpaTransactionManager(defaultEntityManagerFactory);
    }
}

当我打开Hikari调试时,可以看到maximumPoolSize值仍然是10,而不是我定义的20。我尝试应用其他属性,例如泄漏检测阈值,池名称和空闲超时,但这些属性均未应用。

为什么不应用它们?

2 个答案:

答案 0 :(得分:1)

您应该使用属性名称maximumPoolSize

spring.datasource.hikari.maximumPoolSize=20
  

maximumPoolSize   此属性控制允许池达到的最大大小,包括空闲和使用中的连接。

答案 1 :(得分:0)

在有多个数据源的情况下,并且由于您使用的是DataSourceBuilder,因此可以进行以下操作。

spring.datasource.maximum-pool-size=20
trwbi.datasource.maximum-pool-size=20

在您的情况下,我也建议您关闭自动配置:

@SpringBootApplication(scanBasePackages = {...},
        exclude = {DataSourceAutoConfiguration.class} )
@EnableSwagger2
public class Application {
....

如果您不使用构建器,而是使用自动配置,则使用

spring.datasource.hikari.minimumIdle=1
spring.datasource.hikari.maximum-pool-size=3