Spring Boot 提供了多种读取 YAML 配置文件的方式,以下是主要方法及适用场景:
一、基础读取方式
1、 @Value 注解
适用于注入单个属性值,语法为 @Value("${property.path}")。支持默认值设置(如
@Value("${unknown:default}"))。
Yaml:
example:
name: "SpringApp"
Java:
@Value("${example.name}")
private String appName;
2、 Environment 接口
通过自动注入 Environment 对象动态获取属性,支持类型转换和默认值。
Java:
@Autowired
private Environment env;
String port = env.getProperty("server.port", "8080");
二、结构化配置绑定
1、 @ConfigurationProperties
批量绑定配置到 JavaBean,需指定前缀(prefix)并配合 @Component 或 @EnableConfigurationProperties 使用。
Yaml:
database:
url: "jdbc:mysql://localhost:3306/db"
username: "admin"
Java:
@Component
@ConfigurationProperties(prefix = "database")
public class DatabaseConfig {
private String url;
private String username;
// Getters & Setters
}
2、 嵌套对象与集合
YAML 支持复杂数据结构(如 List、Map),需通过 @ConfigurationProperties 映射。
Yaml:
security:
roles:
- "ADMIN"
- "USER"
Java:
@ConfigurationProperties(prefix = "security")
public class SecurityConfig {
private List<String> roles;
// Getters & Setters
}
三、多环境配置
1、 Profile 隔离
使用 --- 分隔不同环境的配置,通过 spring.profiles.active 激活。
Yaml:
spring:
profiles: dev
server.port: 8081
---
spring:
profiles: prod
server.port: 80
2、 外部化配置
支持从 classpath、项目根目录或指定路径加载配置文件,优先级依次递增。
四、注意事项
缩进规则:YAML 严格依赖空格缩进,禁用 Tab 键。
类型安全:建议为 @ConfigurationProperties 类添加 @Validated 注解实现校验。
配置覆盖:相同属性在不同配置文件中,按加载顺序优先使用先读取的值。
以上方法可根据需求灵活组合,@ConfigurationProperties 适合复杂配置,而 @Value 和 Environment 更适用于简单场景。