1. 程式人生 > 實用技巧 >讀取yml配置檔案中的值

讀取yml配置檔案中的值

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;