Spring Profiles应用程序属性顺序

Gan*_*alf 5 spring properties spring-boot

我们有许多具有多个活动Spring配置文件的环境,但application- {profile} .yml文件的优先级是什么?

如果我有 spring.profiles.active=test-us-west-2-p1, test-us-west-2, test

以什么顺序application-test.yml, application-test-us-west-2.yml, application-test-us-west-2-p1.yml加载文件?如果我在每个文件中都有相同的属性,哪个"获胜"?

此外,这是从Spring-Boot 1.5.x更改为2.x吗?好像它可能有.

f-C*_*-CJ 11

配置文件的属性按照您指定的顺序加载,如果在不同的配置文件中定义了相同的属性,则最后一个属性获胜.

此行为适用于Spring Boot版本1.5.x和2.x,如果我没记错,它适用于所有版本的Spring.

Spring总是加载appication.yml.然后,如果指定了某个配置文件,它将加载该配置文件的属性文件.如果在该配置文件之后指定了另一个配置文件,它将加载该配置文件的属性文件.始终使用新值覆盖当前属性的值.

所以,假设你有profile1和profile2.你有这些属性文件:

application.yml:

property1: bob
property2: alice
property3: eve
Run Code Online (Sandbox Code Playgroud)

应用profile1.yml:

property2: alice1
property3: eve1
Run Code Online (Sandbox Code Playgroud)

应用profile2.yml:

property3: eve2
Run Code Online (Sandbox Code Playgroud)

然后你开始申请: spring.profiles.active=profile1, profile2

你会得到:

property1: bob
property2: alice1
property3: eve2
Run Code Online (Sandbox Code Playgroud)

  • **不总是**。在应用程序 jar 文件*外部*提供的 application.yaml 中的属性将覆盖打包在 jar 内的 application-{profile}.yaml 中的同名属性。如果您使用 spring-cloud-config,这条规则尤其重要。请参阅[有关外部属性优先级的官方文档](https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config)。 (6认同)