如果您的配置处理以不兼容的方式更改并且您希望使用“旧”处理方式,您可以通过设置重新启用它:
spring.config.use-legacy-processing=true
或者,使用 YAML:
spring:
config:
use-legacy-processing: true
这应该将配置处理恢复为2.3.x 等效项。但请注意,此属性的存在只是为了简化配置文件配置从 2.3.x 到 2.4.x 的迁移,并且可能会在未来的主要版本中被弃用和删除1,因此您仍然应该尝试尽快迁移。要了解此更改的原因和一些其他信息,请继续阅读。
2.4.0 中值得注意的是以下两种范式:
因此,在 Spring Boot 2.4 中,我们计划对属性和 YAML 文件的加载方式进行两项重大更改:
-
文档将按照定义的顺序加载。
-
无法再从个人资料特定文档激活个人资料。
实际上,这一更改使 what-overrides-what-when 逻辑更易于理解,但导致不得不禁用某些功能。例如:
my.prop: test
---
spring.profiles: prodprops
my.prop: prod
---
spring.profiles: prod
# no longer works - activating a profile from a profile-specific document!
spring.profiles.include: prodprops
将导致异常,因为配置尝试从特定于配置文件的文档中激活配置文件,这不再被允许。
为了涵盖此用例(和其他用例),配置文件组已添加为一项功能。这意味着要启用您以前的行为,您需要创建一个配置文件组,如下所示:
spring.profiles.group.<group>=dev, auth
或者,在 YAML 中:
spring:
profiles:
group:
<group>: dev, auth
<group> 是您选择的个人资料组的名称。请注意,您可以定义多个组,所有组都应具有不同的名称。如果您随后使用 <group> 配置文件启动应用程序,则应激活属于该组的所有配置文件。
附带说明,Spring Boot 2.4.0 还添加了对多文档 properties 文件的支持,如下所示:
test=value
spring.profiles.active=local
#---
spring.config.activate.on-profile=dev
test=overridden value
注意文档分隔符 (#---)。这允许您在 .properties 文件中拥有与在 .yml 文件中类似的覆盖逻辑。
同样,相关update post 中提供了此信息和其他信息。
1 如果有任何迹象表明先前的弃用,则应最早在 2.5.0 或最晚在 2.6.0 中删除该属性,后者更有可能(并且自2.5.x)。