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

Spring Boot 2.7升级3.0.7后@ConfigurationProperties注入失败

Spring Boot 3.0升级后@ConfigurationProperties依赖注入问题解决

问题原因

Spring Boot 3.0对@ConfigurationProperties类的实例化机制做了调整:这类类默认采用构造方法绑定配置属性,不再参与常规的Spring依赖注入流程。因此你无法直接在它的构造方法或字段中注入其他Spring管理的Bean(比如ConfigRepository),这就是升级后构造参数为null的根本原因。

可行调整方案

方案一:将Properties类注册为Bean并依赖注入

给ConnectorProperties添加@Component注解,将其纳入Spring Bean管理,再通过@Autowired注入ConfigRepository:

@Component
@ConfigurationProperties(ConnectorProperties.PREFIX)
public class ConnectorProperties {
    static final String PREFIX = "connector";

    @Autowired
    private ConfigRepository configRepository;

    // 移除原带参构造,保留无参构造
    public ConnectorProperties() {}

    private long gracefulShutdownPeriod = 60; // 替换@Value,用默认值实现配置绑定

    public List<String> getPartners() {
       return configRepository.getPartners();
    }
    
    public void setGracefulShutdownPeriod(long gracefulShutdownPeriod) {                       
        this.gracefulShutdownPeriod = gracefulShutdownPeriod;                                  
    }    
                                
    public long getGracefulShutdownPeriod() {   
        return gracefulShutdownPeriod;          
    }                                                                                                 
}

注:这里把@Value换成了字段默认值,更符合@ConfigurationProperties的配置绑定规范,配置项会自动读取connector.graceful-shutdown-period的值。

方案二:通过配置类手动构建Properties Bean(推荐)

创建独立配置类,注入ConfigRepository后手动构建ConnectorProperties实例,明确分离配置绑定与依赖注入逻辑:

首先修改ConnectorProperties,添加ConfigRepository的setter方法:

@ConfigurationProperties(ConnectorProperties.PREFIX)
public class ConnectorProperties {
    static final String PREFIX = "connector";

    private ConfigRepository configRepository;

    private long gracefulShutdownPeriod = 60;

    public ConnectorProperties() {}

    public void setConfigRepository(ConfigRepository configRepository) {
        this.configRepository = configRepository;
    }
    
    public List<String> getPartners() {
       return configRepository.getPartners();
    }
    
    public void setGracefulShutdownPeriod(long gracefulShutdownPeriod) {                       
        this.gracefulShutdownPeriod = gracefulShutdownPeriod;                                  
    }    
                                
    public long getGracefulShutdownPeriod() {   
        return gracefulShutdownPeriod;          
    }                                                                                                 
}

然后创建配置类:

@Configuration
@EnableConfigurationProperties
public class ConnectorConfig {

    @Bean
    @ConfigurationProperties(ConnectorProperties.PREFIX)
    public ConnectorProperties connectorProperties(ConfigRepository configRepository) {
        ConnectorProperties properties = new ConnectorProperties();
        properties.setConfigRepository(configRepository);
        return properties;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:05:10