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



我有一个名为 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 ,但没有区别。

这个例子确实工作正常。 我的特定问题是配置文件未被读取。

  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. 以下链接也指向一个很好的答案:
    在 Java 中从 yaml 读取地图变得空

最新更新