天天看点

@Value和@CongigurationProperties比较

@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;
}           

复制