You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 07:24:29