SpringBoot @Value 獲取值和@ConfigurationProperties獲取值比較
阿新 • • 發佈:2018-12-18
[email protected]獲取值和@ConfigurationProperties獲取值比較
@ConfigurationProperties | @Value |
|
功能 |
|
一個個指定 |
鬆散繫結(鬆散語法) |
支援 |
不支援 |
SpEL |
不支援 |
支援 |
JSR303資料校驗 |
支援 |
不支援 |
複雜型別封裝 |
支援 |
不支援 |
無論配置檔案yaml還是properties他們都能獲取到值;
如果說,我們在只是在某個業務中獲取一下配置檔案中的某項值,使用@Value;
如果說,我們專門編寫了一個JavaBean和配置檔案進行對映,我們就直接使用onfigurationProperties;
2.舉例解釋(此處以yaml檔案為例)
application.yaml
server: port: 8081 person: lastName: 張三 age: 18 boss: true birth: 2018/12/02 map: {k1: c,k2: z} lists: - zz - bb dog: name: Tom age: 12
javabean
package com.hbsi.bean; import java.util.Date; import java.util.List; import java.util.Map; import javax.validation.constraints.Email; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import org.springframework.validation.annotation.Validated; /* * 將配置檔案中配置的每一個屬性的值,對映到這個元件 * @ConfigurationProperties:告訴SpringBoot將本類中所有屬性和配置檔案中相關的配置進行繫結; * 只有這個元件是容器中的元件,才能用容器提供的@ConfigurationProperties功能 */ @Component @ConfigurationProperties(prefix = "person") @Validated public class Person { //可以通過@Value獲取配置檔案中某一個值 @Email private String lastName; private Integer age; private boolean boss; private Date birth; private Map<String, String> map; private List lists; private Dog dog; }
(1) 鬆散繫結(此時用@ConfigutationPropertis)
application.yaml中的(application.propertiest同樣可以用以下規則)
屬性名匹配規則可以是
pseron:
lastName:使用標準方式
last_name:大寫用-
last-name:大寫用-
(2)支援SpEL表示式(此時用@Value)
public class Person {
private String lastName;
@Value("#{11*2}")
private Integer age;
private boolean boss;
private Date birth;
private Map<String, String> map;
private List lists;
private Dog dog;
}
(3)支援資料校驗(此時用ConfigutationPropertis)
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
@Email//判斷lastName是不是email格式
private String lastName;
private Integer age;
private boolean boss;
private Date birth;
private Map<String, String> map;
private List lists;
private Dog dog;
}
控制檯輸出為
Property: person.lastName
Value: 張三
Origin: class path resource [application.yml]:4:15
Reason: 不是一個合法的電子郵件地址
(4)複雜型別封裝
@Configuration支援(map,list)
server:
port: 8081
person:
map: {k1: c,k2: z}
lists:
- zz
- bb
dog:
name: Tom
age: 12
@Value不支援
@Value("person.map")
private Map<String, String> map;