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

时间:2017-04-26 14:36:43

标签: spring spring-boot spring-profiles

我有带有application.yml的spring boot应用程序。 application.yml的内容

spring:
  profiles:
    active: default,private
integrations:
  ecom:
    api-url: http://localhost:8080/com

application-private.yml的内容

integrations:
  ecom:
    api-url: http://testenv:8080/com

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

如果两个配置文件处于活动状态,该属性是否会在订单中加载和使用?

我的订单: -Dspring.profiles.active = “默认情况下,私有”

先谢谢。

2 个答案:

答案 0 :(得分:0)

在这种情况下,首先会加载 application.yml 中的所有属性,然后 application-private.yml 将根据个人资料加载,从而覆盖您的属性 application.yml

答案 1 :(得分:0)

对于您的示例,以下是 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 在外,后者将覆盖前者。

official documentation about external property precedence.