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

在spring boot中从多个YAML文件读取值

别永年
2023-03-14

spring.config.location可以接受一个目录列表,这些目录为Spring boot应用程序托管yaml文件。

但是列出的目录必须有名为application的文件。yml,否则它们不会被拾取。

如果我的应用程序允许用户使用任何名称放置yaml文件,那么我不能使用此选项。

然后,我手动将文件名添加到属性中,如下所示

spring.config.locationfile1.ymlfile2.yml

每次添加新文件时,我都必须修改此属性。

我能够使用YamlPropertySourceLoader来读取所有文件,并将所有属性放入地图,但有没有另一种更优雅的方法可以让我将这些值直接绑定到注释中。

使用我当前使用的代码片段进行更新,但寻找任何其他更好的替代方案。

Resource[] resources = applicationContext.getResources("classpath*:*.properties");

        Map<Object, Object> map = new HashMap<>();

        Arrays.stream(resources).forEach(res -> {
            try {
                propertiesPropertySourceLoader.load("resources", res)
                        .forEach(prop -> map.putAll((Map<?, ?>) prop.getSource()));
            } catch (IOException e) {
                e.printStackTrace();
            }
        });

共有2个答案

舒博雅
2023-03-14

您可以使用PropertyPlaceHolderConfigure配置多个配置文件,例如:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
  <list>
    <value>${YOUR_HOME}/global.properties</value>
    <value>${YOUR_HOME}/second-level.properties</value>
  </list>
</property>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="fileEncoding" value="UTF8"/>

或者您可以使用@Property tySource注释,例如:

@PropertySource(value = {"classpath:global.properties", "file://${YOUR_HOME}/second-level.properties"}, ignoreResourceNotFound = true)
丁正阳
2023-03-14

如果您的应用程序中有多个yml/Properties文件,那么您可以在配置类上使用@Property tySource("classpath:file.properties"),因此您将能够从该配置文件中读取值。

更多信息查看

 类似资料:
  • 我有以下问题。我根据一个给定的概要文件在yaml文件中读取的值创建一个数据源。 我当前的问题是,当我用“dev”配置文件启动应用程序时,serviceId的值是'my-prod-service'。 我在这里做错了什么?

  • 我在Mule中定义了以下YAML属性文件。 YAML属性文件 我知道要获得名称,我应该使用“#[p('table.customers.name')]。 我想知道的是,有没有任何方法可以通过传递.name来获取密钥,比如table。键或表。$。我的意思是,如果我通过customerID,我应该得到关键的“客户”。类似地,如果我传递orderDateMin,orderDate Max,它应该返回“or

  • 问题内容: 我想知道如何从单个文件夹中读取多个文件(无需指定文件名,只是它们是json文件)。 另外,有可能将它们转换为DataFrame吗? 能给我一个基本的例子吗? 问题答案: 一种选择是使用os.listdir列出目录中的所有文件,然后仅查找以’.json’结尾的文件: 现在,您可以使用pandas DataFrame.from_dict将json(此时为python字典)读入pandas数

  • demo.yaml definitions.yaml文件数据 我想读取 yaml 文件及其折射数据。 输出结果={content':{application/json':{'schema':{'title':'YamlTitle','type':'object','properties':{'name':{'type':'string','minLength':10,'example':'GANE

  • 我正在使用python,我有一个文件(

  • 我需要从多个目录中读取文件,并处理数据并将其存储到DB中。目前我正在使用块多资源阅读器,它适用于1个目录。但现在我必须从多个目录中读取文件。如何使用Spring批处理来做到这一点