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

Java Records搭配@ConfigurationProperties注解使用报错该如何解决

问题根因

你遇到的报错是因为Spring把你的Record配置类识别成了普通Bean,尝试从容器注入构造参数,而没有走配置文件绑定逻辑,具体原因有3个:

  • 不应该给配置类加@Component注解:加了之后Spring会将其作为普通组件注册,构造参数会被当成依赖注入需求,自然找不到int类型的Bean
  • @ConstructorBinding注解位置错误:Spring Boot 2.5.x版本中,需要将该注解放到Record类上才能启用构造函数配置绑定,放在自定义构造函数上不生效
  • 没有显式启用配置属性类:@ConfigurationProperties标注的类需要通过对应注解启用才会被Spring识别为配置类
正确配置方式

步骤1:调整配置类代码

移除@Component注解,将@ConstructorBinding移到类上,同时建议将基本类型int改为包装类型Integer,避免空判断失效:

@ConfigurationProperties("cache")
@ConstructorBinding
public record MyConfig(Integer validity) {
    public MyConfig(Integer validity) {
        this.validity = Optional.ofNullable(validity).orElse(0);
    }
}

步骤2:启用配置属性类

在启动类上添加@EnableConfigurationProperties注解,指定你的配置类:

@SpringBootApplication
@EnableConfigurationProperties(MyConfig.class)
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

如果项目有多个配置属性类,也可以使用@ConfigurationPropertiesScan注解扫描指定包下的所有配置类:

@SpringBootApplication
@ConfigurationPropertiesScan("com.yourproject.config")
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}
补充说明

如果后续升级到Spring Boot 3.x版本,不需要再添加@ConstructorBinding注解,Spring会自动识别Record类的构造函数做配置绑定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:36:00