小编典典

Spring Boot @ConfigurationProperties YAML引用

spring-boot

我真的很喜欢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有可能吗?


阅读 751

收藏
2020-05-30

共1个答案

小编典典

我相信 只能将占位符与字符串属性一起使用 。这给您两个选择:

  • 重复这些值;
  • 将地图定义为属性字符串

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

如果您单击上面的链接,将提供完整的说明。我会引导您完成。

(1)application.yml:

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

(2)定义一个String toMap转换器/拆分器

@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;
2020-05-30