簡體   English   中英

Spring Boot @ConfigurationProperties YAML引用

[英]Spring Boot @ConfigurationProperties YAML referencing

我真的很喜歡Spring的@ ConfigurationProperties-功能,可以通過YAML將配置屬性加載到Java類中。

通常,我會以某種方式使用它,即擁有以下yaml文件:

lst:
  typ:
    A: "FLT"
    B: "123"
    C: "345"
    D: "TTS"

類型屬性將被映射到Java Map。 現在我想有一個在yaml文件本身中引用yaml片段的解決方案,以便可以重用對該片段的引用:

lst: ${typs}

typs:
  A: "FLT"
  B: "123"
  C: "345"
  D: "TTS" 

Spring和@ConfigurationProperties有可能嗎?

我相信只能將占位符與字符串屬性一起使用 這給您兩個選擇:

解決方案-將地圖定義為鍵值的逗號分隔字符串

如果您單擊上面的鏈接,將提供完整的說明。 我會引導您完成。

(1)application.yml:

prop1: A:FLT, B:123, C...
prop2: ${prop1}

(2)定義一個String to Map轉換器/拆分器(來自@FedericoPeraltaSchaffner的答案

@Component("PropertySplitter")
public class PropertySplitter {
    public Map<String, String> map(String property) {
        return this.map(property, ",");
    }
    private Map<String, String> map(String property, String splitter) {
        return Splitter.on(splitter).omitEmptyStrings().trimResults().withKeyValueSeparator(":").split(property);
    }
}

(3)使用@Value和分割器注入地圖:

@Value("#{PropertySplitter.map('${prop1}')}")
Map<String, String> prop1;

@Value("#{PropertySplitter.map('${prop2}')}")
Map<String, String> prop2;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM