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
相关产品推荐
相关产品推荐

