Spring: Profiles

20th August 2020 at 2:19pm
Spring

include 机制

Spring 提供了一个 spring.profiles.include 机制,用于将不同的 profile 包含进来,类似文本替换。这套机制在你使用 .properties 时没有什么问题,但是当你使用 yaml 来作为配置格式时,就会有问题。

比如你有这么 3 个配置文件:

# application-test1.yml
root:
  a: 1

# application-test2.yml
root:
  b: 2

# application.yml
root:
  whatever: 3

你使用 spring.profiles.include=test1,test2,想让 root 下面有 3 个属性(a, b, whatever),但是事实上按加载顺序做覆盖,而没有把几颗树合并。于是最后 root 下面只有一个属性(具体哪一个我也没做实验)。

如果你想避开这个问题,可以把 test1, test2 的配置文件使用 .properties 格式。生命不应该浪费给调试 Spring Profile 的加载逻辑。