Spring Boot yaml嵌套属性映射到Configuration类HashMap

时间:2017-01-04 04:11:30

标签: spring-boot yaml

我有一个名为CommonConfig的配置类,到目前为止工作正常......

@Data
@Component
@ConfigurationProperties(prefix = “my")
public class CommonConfig {
  private String foo;
  private String bar;
  private SubA subA;

  @Data 
  public static class SubA {
    private String baz;
    private SubB subB;

    @Data 
    public static class SubB {
      private String qux;
    }
  }
}

Yaml property文件一起使用:

my.foo: a
my.bar: b
my.sub-a.baz: c
my.sub-a.sub-b.qux: d

当我想要map进入SubB:

时,我的问题就出现了
my:
  foo: a
  bar: b
  sub-a:
    baz: c
    sub-b:
      qux: d
      map:
        number-one: 1
        number-two: 2
        number-three: 3

我尝试在我的SubB类中添加一个简单的地图声明:

...
@Data 
public static class SubB {
  private String qux;
  private Map<String, Integer> map = new HashMap<>();
}

当我运行它时,所有其他属性都在配置中,但地图是空的。 我也尝试不初始化地图,但它保持为空。

我的@SpringBootApplication课程之前一直处理得很好,只有一个注释。基于其他一些StackOverflow问题,我尝试添加@EnableConfigurationProperties,但没有任何区别。

2 个答案:

答案 0 :(得分:1)

这个例子确实很好用。我的特殊问题是一个未被读取的配置文件。

答案 1 :(得分:0)

  1. 如果是YAML文件,application.yml会自动加载。如果文件名是别的,Spring就不会自动加载它。
  2. @PropertySource从SprintBoot 2.1开始不适用于YAML
  3. 如果YAML文件需要不同的名称,我们需要设置spring.config.namespring.config.location
    https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-external-config-yaml
  4. 以下链接也指出了一个很好的答案:
    Reading a map from yaml in Java getting null