讀取yml配置檔案中的值
阿新 • • 發佈:2020-12-08
1.yml檔案
person:
lastName: hello
age: 18
boss: false
birth: 2017/12/12
maps: {k1: v1,k2: 12}
lists:
- lisi
- zhaoliu
dog:
name: 小狗
age: 12
2.javaBean
/**
* 將配置檔案中配置的每一個屬性的值,對映到這個元件中
* @ConfigurationProperties:告訴SpringBoot將本類中的所有屬性和配置檔案中相關的配置進行繫結;
* prefix = "person":配置檔案中哪個下面的所有屬性進行一一對映
*
* 只有這個元件是容器中的元件,才能容器提供的@ConfigurationProperties功能;
*
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}
3.pom.xml匯入依賴
<!--匯入配置檔案處理器,配置檔案進行繫結就會有提示--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
注:這裡可能需要啟動一下專案,使之生效
4.@value 註解獲取yml配置檔案中的資料,以及@Validated進行資料校驗
@Component
//@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
/**
* <bean class="Person">
* <property name="lastName" value="字面量/${key}從環境變數、配置檔案中獲取值/#{SpEL}"></property>
* <bean/>
*/
//lastName必須是郵箱格式
@Email
@Value("${person.last-name}")
private String lastName;
@Value("#{11*2}")
private Integer age;
@Value("true")
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
5.@ConfigurationProperties(prefix = "person") 和 @value的區別
|| @ConfigurationProperties | @Value |
| ---------- | ------------------------ | ------ |
| 功能 | 批量注入配置檔案中的屬性| 一個個指定|
| 鬆散繫結(鬆散語法) | 支援 | 不支援|
| SpEL | 不支援 | 支援|
| JSR303資料校驗 | 支援 | 不支援|
| 複雜型別封裝 | 支援 | 不支援|
6.總結
配置檔案yml還是properties他們都能獲取到值;
如果說,我們只是在某個業務邏輯中需要獲取一下配置檔案中的某項值,使用@Value;
如果說,我們專門編寫了一個javaBean來和配置檔案進行對映,我們就直接使用@ConfigurationProperties;