【问题标题】:Getting lists from Spring Boot configuration从 Spring Boot 配置中获取列表
【发布时间】:2016-11-18 12:21:43
【问题描述】:

我的 Spring Boot 应用程序似乎无法识别我的配置文件 (application.yml) 中的列表。以下是我正在尝试做的大致内容。

Java 代码

@Autowired
private Environment environment;

public class Config{
  public Config(){
  }

  public List<String> getDateFields(){
    return environment.getProperty("dates.fields", List.class);
  }
}

application.yml

dates:
  fields:
  - date
  - creationDate

getDateFields 在上面返回 null。但是,如果我使用以下...

application.yml

dates:
  fields: creationDate

...它工作正常并将其作为列表返回(尽管是单值列表)。为什么我无法从我的 application.yml 文件中获取列表?我尝试检查environment是否包含dates.fields,而environment.containsProperty("dates.fields")在使用列表版本时返回false

【问题讨论】:

    标签: java spring-boot yaml


    【解决方案1】:

    如果您想使用 environment.getProperty("dates.fields", List.class); 将值作为 List 加载,请为您的列表属性使用逗号分隔格式;

    dates:
      fields: date, creationDate
    

    这种方式对我来说很顺利。

    但是如果你想使用

    dates:
      fields:
         - date
         - creationDate
    

    然后最好使用以下方法从 yaml 文件中加载属性。

    @Component
    @ConfigurationProperties(prefix = "dates")
    public class Config{
    
       private List<String> fields = new ArrayList<String>();
    
       public List<String> getDateFields(){
          return this.fields;
       }
    }
    

    【讨论】: