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