Spring Boot @ConfigurationProperties YAML引用

时间:2016-09-15 11:53:19

标签: spring spring-boot yaml

我非常喜欢Spring的@ ConfigurationProperties功能,可以通过YAML将配置属性加载到Java类中。

通常我会以某种方式使用它,我有以下yaml文件:

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

type-attribute将映射到Java-Map。现在我希望有一个解决方案来引用yaml文件本身中的yaml-fragments,这样我就可以重用对该片段的引用:

lst: ${typs}

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

Spring和@ConfigurationProperties可以实现吗?

1 个答案:

答案 0 :(得分:2)

我认为只能使用带字符串属性的占位符。  这为您提供了两个选项:

解决方案 - 将地图定义为以逗号分隔的键值字符串

如果您点击上面的链接,则会提供整个说明。我会引导你完成它。

(1)application.yml:

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

(2)定义一个String to Map转换器/拆分器(来自@FedericoPeraltaSchaffner's answer

@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;