无法从启动应用程序中的多个 yml 文件加载属性

Posted

技术标签:

【中文标题】无法从启动应用程序中的多个 yml 文件加载属性【英文标题】:Unable to load properties from multiple yml file in a boot app 【发布时间】:2021-01-24 02:47:58 【问题描述】:

我有一个微服务,我想拥有一些依赖于环境的属性 所以我使用的是application.yml、application-dev.yml、application-int.yml等.....

在启动时,我通过spring.profiles.active=myprofile 和相关的applicaiton-myprofile.ymlapplicaiton.yml 一起加载。到目前为止一切正常。

但是现在我想将我的一些非特定于环境的属性分类到他们自己的业务模块中,所以 除了我的 application.yml applicaiton-.yml 我还想从在 spring ENVIRONMENT 中添加更多 yml 文件。所以我可以使用@ConfigurationProperties 创建正确的 BusinessConfigProperties 类。

为了实现这一点,我尝试在 spring.config.location 中添加这些 yml 文件名,如下所示

     spring:
          config:
            name:
              - some-props
              - very-different-name-props
            location:
              - classpath:/config/*

我也提供了配置名称,我所有的 yml 文件都存在于 /config 文件夹中

但我仍然无法读取这些文件中提到的任何属性。

我可以通过使用org.yaml.snakeyaml.Yml 手动加载文件来克服这个问题,但是对于读取 YML 映射和实例化我的类来说,样板代码太多。应该有一种简单的方法可以通过 spring 实现这一点。

更新

我在上面更新为,

     spring:
          config:
            location:
              - classpath:classpath:/config/some-props.yml,classpath:/config/very-different-name-props.yml

但这也行不通 我没有使用配置文件,因为与上述文件一起,我已经拥有applicaiton-<profile>.yml 用于环境特定属性。我将通过 spring.profile.active 作为启动 jvm 参数中的环境名称。 另外我不想以 application-.yml

开头命名这些文件

【问题讨论】:

这根本行不通,因为这不是定义要加载的其他属性的方法。使用--spring-config-location=启动应用程序时,这些属性需要作为属性传入 【参考方案1】:

也许只是输入你的问题,应该是spring.profiles.active=myprofile

您可以尝试以下尝试加载多个文件的方法

spring:
  config:
    location: classpath:/config/some-props.yml,classpath:/config/some-Other-props.yml

spring:
  profiles:
    include:
      - CustomPropertiesFile

你也可以参考这个https://youtu.be/0G9X-pTv_UU

http://roufid.com/load-multiple-configuration-files-different-directories-spring-boot/

【讨论】:

感谢我编辑了profileS 错字。但我不能使用配置文件包含解决方案。我的 YML 文件名不是 application-.yml 它们是具体名称。比如 payment-gateways.yml、batch-apps.yml 等(不好的例子)。 spring: config: location: classpath 也没有加载属性。 尝试在 java 启动命令中使用 spring.config.location 而不是 main application.yml。像这样 java -jar myproject.jar --spring.config.name=application,conf --spring.config.location=classpath:/external/properties/,classpath:/com/roufid/tutorial。浏览我分享的博客,你会更清楚

以上是关于无法从启动应用程序中的多个 yml 文件加载属性的主要内容,如果未能解决你的问题,请参考以下文章

典型的 .yml 或 .xml 矩阵应如何查找 OpenCV 使用

Rails 遗留应用程序和 Ruby 2 错误:无法从文件类型 yml 加载翻译未知

启动 jar 包时指定 yml 文件

无法在 Spring Boot 中加载外部属性

无法将自定义 application.yml 配置的子集加载到 Quarkus 中的地图

是否可以从 Maven 多模块项目的父模块中的配置文件夹加载 Spring-Boot 属性?