当前位置: 首页 > 知识库问答 >
问题:

正在加载多个YAML文件(使用@ConfigurationProperties?)

岳和泽
2023-03-14

使用Spring Boot 1.3.0.Release

programs/program1.yml

name: Program 1
minDays: 4
maxDays: 6
@Configuration
@ConfigurationProperties(locations = "classpath:programs/program1.yml", ignoreUnknownFields = false)
public class ProgramProperties {

private Program test; //Program is a POJO with all the fields in the yml.
//getters+setters

编辑:一种工作方法是手动操作:

    private static final Yaml yaml = new Yaml(new Constructor(Program.class));
private static final ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();

try {
        for (Resource resource : resolver.getResources("/programs/*.yml")) {

            Object data = yaml.load(resource.getInputStream());

            programList.add((Program) data);
        }
    }
    catch (IOException ioe) {
        logger.error("failed to load resource", ioe);
    }

共有1个答案

计和顺
2023-03-14

在Spring中,可以使用PropertySource注释加载多个配置属性文件,但不能加载YAML文件。参见以下链接中的26.6.4节:

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-typesafe-configuration-properties

然而,从您的问题,似乎您可以配置您的所有程序在单个YAML然后获得所有列表的程序在单个列表。

示例YAML(all.YAML)

programs:
  - name: A
    min: 1
    max: 2
  - name: B
    min: 3
    max: 4

config.java

@Configuration
@ConfigurationProperties(locations={"classpath:all.yaml"})
public class Config{

    private List<Program> programs;

    public void setPrograms(List<Program> programs) {
        this.programs = programs;
    }

    public List<Program> getPrograms() {
        return programs;
    }
}
 类似资料:
  • 用PySimpleGUI一次可以选择多个文件路径吗 只能选择一个文件 null 没有循环模式的多个文件的任何API?

  • 我找到了类YamlPropertiesFactoryBean,它似乎能够完成我需要的工作。 我的问题是我不确定如何在我的Spring应用程序中使用这个类(它正在使用基于注释的配置)。看来我应该使用setBeanFactory方法在PropertySourcesPlaceholderConfigurer中配置它。 以前,我使用@PropertySource加载属性文件,如下所示:

  • 问题内容: 我有一个Spring应用程序,当前正在使用* .properties文件,但我想使用YAML文件来代替它。 我发现类YamlPropertiesFactoryBean似乎能够满足我的需求。 我的问题是我不确定如何在Spring应用程序中使用此类(使用基于注释的配置)。似乎我应该使用 setBeanFactory方法在PropertySourcesPlaceholderConfigure

  • 问题内容: 我需要从文件加载属性,该文件包含应用程序可以从中读取文件的文件夹的路径。 我正在使用以下代码来注入属性: 用于开发的文件位于下,在生产环境中使用以下命令运行应用程序,以覆盖开发设置: Spring Boot文档说: SpringApplication将在以下位置从application.properties文件加载属性,并将其添加到Spring Environment中: 当前目录的/

  • 我需要从文件加载一个属性,该文件包含应用程序可以从中读取文件的文件夹的路径。 当前目录 类路径/配置包 类路径根 是否必须使用类或添加一个特殊注释来启用Spring Boot中对的支持? 编辑:文件包含一些其他属性,这些属性由Spring Boot成功加载,如或。

  • 在Spring,如果我们有两个.yaml文件作为。(包含在应用程序中) 如果这个配置的属性类类似于- 则仅从一个文件加载“流”,即流。size()给出2.(remote04,remote05。这取决于application.yaml中配置文件的顺序) 但如果我将yamls文件更改为- 和属性类 现在hashmap将有4个条目。i、 e.流量。size()给出4 那么,这是否意味着Spring不会从