SpringBoot自定義YAML配置類
阿新 • • 發佈:2018-12-01
在開發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註解的配置類,不能為內部類