Spring Boot配置Hikari连接池参数不生效,池大小维持默认值问题
1. 排查自定义DataSource Bean的影响
如果项目中存在手动注入DataSource Bean的代码,Spring Boot默认的Hikari自动配置会直接失效,配置文件中的spring.datasource.hikari.*参数不会被自动加载。
先排查是否存在类似未绑定配置的代码:
@Bean public DataSource dataSource() { // 手动初始化但未读取配置参数的Hikari数据源 return new HikariDataSource(); }
如果存在手动配置的DataSource,需要添加配置绑定注解,修改为:
@Bean @ConfigurationProperties(prefix = "spring.datasource.hikari") public DataSource dataSource() { return DataSourceBuilder.create().type(HikariDataSource.class).build(); }
2. 检查配置优先级覆盖问题
如果项目存在多环境配置文件、启动命令指定参数、Nacos/Apollo等远程配置中心配置,需要确认是否有更高优先级的配置覆盖了maximumPoolSize参数。
Spring Boot配置优先级从高到低为:启动命令参数 > 远程配置中心参数 > Jar包外部配置文件 > Jar包内部配置文件 > bootstrap配置文件,需按顺序排查是否存在冲突配置。
3. 验证配置参数实际绑定结果
可在项目中增加测试代码,启动后直接打印HikariDataSource的实际参数,确认配置是否被正确加载:
@Component public class HikariConfigChecker implements ApplicationRunner { @Autowired private HikariDataSource dataSource; @Override public void run(ApplicationArguments args) throws Exception { System.out.println("实际最大连接数配置:" + dataSource.getMaximumPoolSize()); System.out.println("实际最小空闲连接配置:" + dataSource.getMinimumIdle()); } }
如果打印的maximumPoolSize为30,说明配置已经生效,日志中显示总连接数为10只是因为Hikari不会启动就直接创建到最大连接数,会根据实际请求量逐步扩容到最大上限,后续有足够请求时连接数会自动上涨到30。如果打印值为10,说明配置确实未绑定,继续排查前两项问题。
4. 确认版本适配的配置写法
Spring Boot 2.x版本默认集成Hikari连接池,标准配置前缀就是spring.datasource.hikari.*,驼峰写法maximumPoolSize和短横线写法maximum-pool-size都可兼容,无需修改写法。如果是Spring Boot 1.x版本,需要手动引入Hikari依赖,配置前缀会有差异。
内容的提问来源于stack exchange,提问作者Rik

