覆盖多个弹簧活动配置文件的属性值

use*_*006 4 spring spring-profiles spring-boot

我有一个带有 application.yml 的 Spring Boot 应用程序。

application.yml的内容:

spring:
  profiles:
    active: default,private
integrations:
  ecom:
    api-url: http://localhost:8080/com
Run Code Online (Sandbox Code Playgroud)

application-private.yml 的内容:

integrations:
  ecom:
    api-url: http://testenv:8080/com
Run Code Online (Sandbox Code Playgroud)

根据我的理解,集成:ecom:api-url 正在从 application-private.yml 加载,即使默认配置文件也具有相同的属性。

如果两个配置文件处于活动状态,是否会按照指定配置文件的顺序加载和使用该属性?

我的订单:

-Dspring.profiles.active="default,private"
Run Code Online (Sandbox Code Playgroud)

提前致谢。

Pau*_*son 5

对于您的示例,以下是 Spring 获取属性值的优先顺序(从最高优先级到最低优先级):

  1. application-private.yml在 jar 文件外部提供(例如,通过 spring-cloud-config)
  2. application.yml在 jar 文件外部提供(application.yml 相当于 application-default.yml)
  3. application-private.yml在你的 jar 文件提供
  4. application.yml在你的 jar 文件提供

因此,如果 jar 文件中有 application-private.yml 和 application.yml,则前者中的属性将覆盖后者中的属性。

但是,如果 application-private.yml 位于 jar 内部,而 application.yml 位于外部,则后者将覆盖前者。

请参阅有关外部属性优先级的官方文档。