配置基于地图的配置的属性名称

时间:2018-10-11 09:01:36

标签: java spring spring-boot

使用Spring Boot,我可以将Bar的id,counter,active配置为其他配置名称吗?如果使用@Value($ {a.b.c.d})是简单的扁平化配置,我知道该怎么做,但是对于基于地图的配置,我该如何实现?

例如,在下面的Foo-Bar配置中,如何实现如下设置:

foo.bars.one.bar-counter=10
foo.bars.one.bar-id=1

public class Foo {
  private Map<String, Bar> bars = new HashMap<>();
  public Map<String, Bar> getBars() { .... }
}

public class Bar {
    @Value(${bar-id}) // not work
    private String id;
    @Value(${bar-count})  // not work
    private Integer counter;
}

1 个答案:

答案 0 :(得分:0)

好吧,您必须使用Spring if (x != y) quotient = t / (x-y)配置类,最终会得到类似以下的内容:

@ConfigurationProperties

这将为您提供一个import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; @Component @ConfigurationProperties(prefix = "foo") public class FooProperties { private List<BarProperty> foos = new ArrayList<>(); public List<BarProperty> getFoos() { return foos; } public void setFoos(List<BarProperty> foos) { this.foos = foos; } public static class BarProperty { private int barCounter; private int barId; public int getBarCounter() { return barCounter; } public void setBarCounter(int barCounter) { this.barCounter = barCounter; } public int getBarId() { return barId; } public void setBarId(int barId) { this.barId = barId; } } } 这样的配置文件

application.properties

foo.foos[0].bar-counter=1 foo.foos[0].bar-id=1 foo.foos[2].bar-counter=2 foo.foos[2].bar-id=2

application.yml
  

不要忘记在您的foo: foos: - bar-counter: 1 bar-id: 1 - bar-counter: 2 bar-id: 2 中包含此依赖项以使用Spring Configuration Properties

pom.xml

希望有帮助。