@Value和@CongigurationProperties 比较
属性 | @CongigurationProperties | @Value |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
spEL | 不支持 | 支持 |
JSP303数据校验 | 支持 | 不支持 |
@Component
//@ConfigurationProperties(prefix = "person")
public class Person {
@Value("${person.last-name}") // 从配置文件获取
private String lastName;
@Value("#{11*2}") // 直接计算 spEL表达式
private Integer age;
@Value("true") // 字面量
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
复制
#application.properties
#server.port = 8081
#配置person的值
person.last-name=张三
person.age=16
#person.age=#{11*2} //不支持spEL(表达式语言)
person.birth=2017/12/15
person.boss=false
person.maps.k1 = v1
person.maps.k2 = 14
person.lists=a,b,c
复制
如何选择@Value和@CongigurationProperties
配置文件yml还是properties他们都能获取到值;如果只是在某个业务逻辑中需要获取配置文件中的某项值,使用@Value;如果专门编写一个javaBean来和配置文件进行映射,就直接使用@CongigurationProperties
@RestController // 相当于 @Controller @ResponseBody
public class HelloController {
@Value("${person.last-name}") // 从配置文件获取
private String name;
@RequestMapping("/hello")
public String hello() {
return "Hello World!" + name;
}
}
复制
@CongigurationProperties 支持松散的绑定(Relaxed binding)
属性 | 说明 |
---|---|
person.firstName | 标准驼峰规则 |
person.first-name | 虚线表示,推荐用于.properties和.yml文件中 |
PERSON_FIRST_NAME | 大写形式,使用系统环境变量时推荐 |
@ConfigurationProperties校验通过添加JSR-303 javax.validation约束注解
@Component
@ConfigurationProperties(prefix = "person")
@Validated // 添加JSR-303 javax.validation约束注解
public class Person {
@Email // lastName必须是邮箱格式
private String lastName;
@Value("#{11*2}") // 直接计算 spEL表达式
private Integer age;
@Value("true") // 字面量
private Boolean boss;
private Date birth;
private Map<String, Object> maps;
private List<Object> lists;
private Dog dog;
}
复制