在上一篇我们YAML配置文件的文章中,我们使用了@ConfigurationProperties进行配置文件的映射,那么我们可以不可以用Spring原始的@Value注解来获取配置文件中的值呢?
当然是可以的,我们先在代码上对两种方式进行对比
@ConfigurationProperties 方式
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
private String name;
private Integer age;
private Boolean boss;
@Past
private Date dirth;
private Map<String, Object> maps;
private List<Object> lists;
private Dog dog;
@Value 方式
@Component
public class Person {
@Value("${person.name}")
private String name;
@Value("#{2*3}")
private Integer age;
@Value("${person.boss}")
private Boolean boss;
@Value("${person.dirth}")
private Date dirth;
我们来拉一个表格来总结下二者的区别
ConfigurationProperties | Value | |
---|---|---|
功能 | 批量注入配置文件属性 | 需要一个一个绑定 |
松散绑定(松散语法) | 支持 | 不支持 |
SqEL | 不支持 | 支持 |
JSR303校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
配置文件yml与properties两种方式均可以获取到值
如果我们只是在某个业务逻辑中获取一下配置文件的某项值,那么我们就可以用@Value方式
松散语法
当我们使用@ConfigurationProperties获取配置文件值是,我们的配置文件中属性可以使用松散语法来定义
person.firstName: 使用标准方式
person.first-name: 使用“-”表示大写方式
person.first_name: 使用“_”表示大写方式
PERSON_FIRST_NAME: 推荐的系统属性方法