@ConfigurationProperties 是 Spring Boot 中批量读取配置的推荐方式,通过注解绑定 yml/properties 到 Java Bean,支持嵌套、集合、校验及自动类型转换。

在 Spring Boot 中,@ConfigurationProperties 是批量读取配置文件最常用、最推荐的方式。它能把 application.yml 或 application.properties 中的一组结构化配置,自动绑定到一个 Java Bean 上,避免零散使用 @Value,提升可维护性和类型安全性。
1. 定义配置类并启用绑定
创建一个普通 Java 类(如 AppConfig),用 @ConfigurationProperties 注解指定配置前缀,并确保该类被 Spring 容器管理(加 @Component 或通过 @EnableConfigurationProperties 显式注册):
注意:Spring Boot 2.2+ 默认要求配置类必须有无参构造器,且字段需提供 setter 方法(或使用 Lombok 的 @Data/@Setter)。
- 添加
@ConfigurationProperties(prefix = "app"),对应 yml 中以app.开头的配置项 - 加上
@Component让 Spring 自动扫描并注入(也可不加,改用@EnableConfigurationProperties(AppConfig.class)在启动类上启用) - 建议搭配
@Validated支持校验(如@NotBlank、@Min)
2. 编写配置内容(application.yml)
配置需与 Java 类字段名严格匹配(支持驼峰转连字符,如 maxConnections ↔ max-connections):
app:
name: demo-service
version: 1.2.0
timeout: 5000
features:
enable-cache: true
enable-log: false
servers:
- host: 192.168.1.10
port: 8080
- host: 192.168.1.11
port: 8081
对应 Java 类中需定义嵌套对象(Features)、集合(List<server></server>)等结构,并确保有相应 getter/setter。
3. 启用 JSR-303 校验(可选但推荐)
在配置类字段上加校验注解,再配合 @Validated,Spring 启动时会校验配置合法性:
- 例如:
@NotBlank private String name;、@Min(1000) private long timeout; - 若配置缺失或不合法,应用启动失败,并提示具体错误位置
- 需引入
spring-boot-starter-validation依赖(新版 Spring Boot 已内置)
4. 使用配置类
像普通 Bean 一样通过 @Autowired 注入即可,所有属性已自动绑定并完成类型转换(含日期、Duration、集合、嵌套对象等):
@Service
public class AppService {
@Autowired
private AppConfig appConfig;
<pre class="brush:php;toolbar:false;">public void printInfo() {
System.out.println(appConfig.getName());
System.out.println(appConfig.getFeatures().isEnableCache());
appConfig.getServers().forEach(s -> System.out.println(s.getHost()));
}}
无需手动解析字符串,也不用担心类型转换异常 —— Spring Boot 会自动处理。











