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

Spring Boot 1.5.2多数据源连接池属性配置问题求助

解决Spring Boot 1.5.2双数据源连接池属性不生效的问题

嘿,我之前在Spring Boot 1.5.x版本配置多数据源时,也踩过连接池属性死活不生效的坑,大概率是DataSourceBuilder默认没正确绑定连接池配置项,或者没明确指定连接池类型。给你几个可行的解决办法:

1. 明确指定连接池类型并完善配置绑定

Spring Boot 1.5.x默认用Tomcat JDBC连接池,如果你想用HikariCP、DBCP2这类其他池,得先引入对应依赖,然后在配置类里明确指定连接池type,同时保证@ConfigurationProperties的前缀能覆盖到连接池的配置项。

完整配置类示例

@Configuration
public class DataSourceConfig {

    // 主数据源
    @Bean(name = "oneDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.one")
    @Primary
    public DataSource oneDataSource() {
        // 明确指定Tomcat JDBC连接池类型
        return DataSourceBuilder.create()
                .type(org.apache.tomcat.jdbc.pool.DataSource.class)
                .build();
    }

    // 第二个数据源
    @Bean(name = "twoDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.two")
    public DataSource twoDataSource() {
        return DataSourceBuilder.create()
                .type(org.apache.tomcat.jdbc.pool.DataSource.class)
                .build();
    }

    // 配套MyBatis的SqlSessionFactory配置(如果用到的话)
    @Bean(name = "oneSqlSessionFactory")
    @Primary
    public SqlSessionFactory oneSqlSessionFactory(@Qualifier("oneDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        // 可按需添加mapperLocations等配置
        return bean.getObject();
    }

    @Bean(name = "twoSqlSessionFactory")
    public SqlSessionFactory twoSqlSessionFactory(@Qualifier("twoDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean.getObject();
    }
}

2. 配置文件里的连接池属性要对应正确

以Tomcat JDBC为例,你的application.properties配置得像这样:

# 主数据源基础配置
spring.datasource.one.url=jdbc:mysql://localhost:3306/db_one?useSSL=false
spring.datasource.one.username=root
spring.datasource.one.password=123456
spring.datasource.one.driver-class-name=com.mysql.jdbc.Driver
# Tomcat连接池核心属性
spring.datasource.one.max-active=20
spring.datasource.one.max-idle=10
spring.datasource.one.min-idle=5
spring.datasource.one.initial-size=5
spring.datasource.one.max-wait=10000

# 第二个数据源配置
spring.datasource.two.url=jdbc:mysql://localhost:3306/db_two?useSSL=false
spring.datasource.two.username=root
spring.datasource.two.password=123456
spring.datasource.two.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.two.max-active=15
spring.datasource.two.max-idle=8
spring.datasource.two.min-idle=3
spring.datasource.two.initial-size=3
spring.datasource.two.max-wait=8000

如果想用HikariCP,先引入依赖:

<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
</dependency>

然后配置类里的type改成com.zaxxer.hikari.HikariDataSource,配置文件里的属性要对应Hikari的规则,比如spring.datasource.one.hikari.maximum-pool-size=20。

3. 排查常见坑

  • 确保@ConfigurationProperties的前缀和配置文件里的拼写完全一致,别打错字
  • 自定义连接池时,要确认对应的依赖已经正确引入到项目中
  • Spring Boot 1.5.x里DataSourceBuilder会自动根据classpath的依赖选连接池,但手动指定type会更可靠,避免自动选择出错

内容的提问来源于stack exchange,提问作者Prashanth Sg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:52:59