我有一个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。我试图应用其他属性,如leak-detection-threshhold,pool-name和idle-timeout,但这两个属性都没有被应用。
他们为什么没有申请?
您应该使用属性名称maximumPoolSize
spring.datasource.hikari.maximumPoolSize=20
maximumPoolSize此属性控制允许池到达的最大大小,包括空闲和正在使用的连接。
如果有多个数据源,并且因为您正在使用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