1. 程式人生 > >SpringBoot自定義YAML配置類

SpringBoot自定義YAML配置類

在開發SpringBoot應用程式中,可以使用yaml檔案來配置各種屬性及引數,並可以直接對映到Java類的屬性當中。

比如,我有一個Java類 UserProperties.java

package cn.buddie.test.yaml;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 使用者配置
 */
public class UserProperties {
    /**
     * 名稱
     */
    private String userName;
    /**
     * 性別
     */
    private int gender;

    // getter & setter
    public void setUserName(String userName) {
        this.userName = userName;
    }

    public void setGender(int gender) {
        this.gender = gender;
    }

    public String getUserName() {
        return userName;
    }

    public int getGender() {
        return gender;
    }
}

我期望能在yaml檔案中配置UserProperties中的屬性,當我需要使用時,直接從UserProperties類中取就可以了。

 

只需要給UserProperties類中加入兩個註解就可以了

@ConfigurationProperties("user")
@Component
public class UserProperties

其中@ConfigurationProperties表示這是一個註解類,"user":表示要解析yaml檔案中user開頭的配置

@Component表示要將此類做作一個元件,註冊到Spring容器中,方便我們的後面通過自動注入來使用。

然後yaml配置檔案中,對UserProperties中的屬性通過配置就可以

application.yaml

user:
  user-name: 'zhangsan'
  gender: 2

在java類中屬性userName,在yaml中,也可以寫成‘user-name’,規則就是把大寫字母為成'-'+對應的小寫字母 

 

寫一個測試類,測試一下

package cn.buddie.test.yaml;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.boot.test.context.SpringBootTest;

@RunWith(SpringRunner.class)
@SpringBootTest
public class YamlTest {

    @Autowired
    private UserProperties userProperties;

    @Test
    public void testYaml() {
        System.out.println(userProperties.getUserName() + "-" + userProperties.getGender());
    }
}

測試結果

zhangsan-2

 

需要注意的地方

1、需要依賴jar包:

compileOnly("org.springframework.boot:spring-boot-configuration-processor")

2、屬性不能直接用'name',這樣會取到系統環境中的'name'

3、被@ConfigurationProperties註解的配置類,不能為內部類