Spring Boot 3.4.4多自定义数据源下Hikari连接池minimum-idle参数不生效问题求助
Spring Boot 3.4.4多自定义数据源下Hikari连接池minimum-idle参数不生效问题求助
大家好,我最近在Spring Boot 3.4.4的多数据源配置中遇到了一个棘手的问题,想请教一下各位:
我维护着多个基于Spring Boot 3.4.4的应用,分别连接不同的数据库。在使用单一默认数据源时,Hikari连接池的配置是完全正常的,比如下面的application.yml配置,minimum-idle等参数都能按预期生效:
spring: datasource: hikari: maximum-pool-size: 10 idle-timeout: 20000 minimum-idle: 1 driver-class-name: org.postgresql.Driver url: jdbc:postgresql://ip:port/dbname username: user1 password: password1
但当我需要在部分应用中访问多个数据库时,问题就出现了。我在application.yml里同时配置了默认数据源和第二个数据源:
spring: datasource: hikari: maximum-pool-size: 10 idle-timeout: 20000 minimum-idle: 1 driver-class-name: org.postgresql.Driver url: jdbc:postgresql://ip:port/dbname username: user1 password: password1 datasource2: hikari: maximum-pool-size: 10 idle-timeout: 20000 minimum-idle: 1 driver-class-name: org.postgresql.Driver url: jdbc:postgresql://ip:port/dbname2 username: user2 password: password2
为了初始化这些数据源,我为每个数据源编写了自定义的配置类,每个数据源对应一个类似的配置类,以第一个数据源的配置类为例:
@Configuration @EnableJpaRepositories( basePackages = {"my.packages.repository.datasource1"}, entityManagerFactoryRef = "myEntityManagerFactory", transactionManagerRef = "myTransactionManager" ) @EnableTransactionManagement @RequiredArgsConstructor public class MyDbConfig { @Primary @Bean("myDataSourceProperties") @ConfigurationProperties("spring.datasource") DataSourceProperties myDataSourceProperties() { return new DataSourceProperties(); } @Primary @Bean(name = "myDataSource") DataSource myDataSource(@Qualifier("myDataSourceProperties") DataSourceProperties myDataSourceProperties) { return myDataSourceProperties.initializeDataSourceBuilder().build(); } @Primary @Bean(name = "myEntityManagerFactory") LocalContainerEntityManagerFactoryBean myEntityManagerFactory( final EntityManagerFactoryBuilder builder, @Qualifier("myDataSource") DataSource dataSource, JpaProperties jpaProperties) { return builder.dataSource(dataSource) .packages("my.packages.domain.datasource1") .jta(false) .persistenceUnit("my-datasource1") .properties(jpaProperties.getProperties()) .properties(Map.of( "hibernate.physical_naming_strategy", "org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy", "hibernate.implicit_naming_strategy", "org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy", "hibernate.id.new_generator_mappings", "true", "hibernate.transaction.jta.platform", "org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform" )) .build(); } @Primary @Bean(name = "myTransactionManager") PlatformTransactionManager myTransactionManager(@Qualifier("myEntityManagerFactory") EntityManagerFactory entityManagerFactory) { return new JpaTransactionManager(entityManagerFactory); } }
我已经把不同数据源的Repository和Entity分别放在了对应包下,确保它们绑定到正确的数据源,目前数据访问是正常的,但Hikari连接池的minimum-idle配置完全没生效——明明设置了minimum-idle: 1,但启动时还是初始化了10个连接(和maximum-pool-size数值一致)。我知道Hikari的默认行为是让minimum-idle等于maximum-pool-size,但我明明手动指定了更小的数值,为什么自定义数据源场景下不生效呢?
应用启动时的相关日志片段如下:
[ main] c.z.h.HikariDataSource : HikariPool-1 - Starting... [ main] c.z.h.p.HikariPool : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@20a9fb01 [ main] c.z.h.HikariDataSource : HikariPool-1 - Start completed. [ main] o.h.j.i.u.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: my-datasource1] [ main] o.h.Version : HHH000412: Hibernate ORM core version 6.6.11.Final [ main] o.h.c.i.RegionFactoryInitiator : HHH000026: Second-level cache disabled [ main] o.s.b.w.e.t.TomcatWebServer : Tomcat initialized with port 8080 (http) [ main] o.a.c.c.StandardService : Starting service [Tomcat] [ main] o.a.c.c.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.39] [ main] o.a.c.c.C.[.[.[/] : Initializing Spring embedded WebApplicationContext [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 19839 ms [ main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer [ main] o.h.o.c.pooling : HHH10001005: Database info: Database JDBC URL [Connecting through datasource 'HikariDataSource (
有没有朋友遇到过类似的问题?或者能帮我排查下哪里配置出错了吗?
内容来源于stack exchange
相关产品推荐
相关产品推荐

