在 Spring Boot 2.4.0 版本中包含配置文件

作为开发人员,我在本地开发环境中使用默认配置文件。这是我文件的一部分:devapplication-dev.properties

# Profiles    
spring.profiles.include=auth

以前,我在运行时使用Spring Boot 2.3.0.RELEASE和属性包含的配置文件。spring.profiles.includeauth

但是在我迁移到Spring Boot 2.4.0之后,我没有启用配置文件。 物业似乎不像以前那样工作。authspring.profiles.include

请告诉我如何配置我的配置文件,以便获得与迁移前相同的结果。(我不想在这里使用个人资料组)

提前致谢!


答案 1

如果您的配置处理以不兼容的方式发生更改,并且您希望使用“旧版”处理方式,则可以通过设置以下设置来重新启用它:

spring.config.use-legacy-processing=true

或者,使用 YAML:

spring:
  config:
    use-legacy-processing: true

这应该将配置处理恢复为等效项。但是,请注意,此属性的存在只是为了简化配置文件配置从 到 的迁移,并且可能会在将来的主要版本1 中被弃用和删除,因此您仍应尝试尽快迁移。要了解此更改的原因和一些其他信息,请继续阅读。2.3.x2.3.x2.4.x

值得注意的是以下两种范式:2.4.0

因此,在Spring Boot 2.4中,我们计划对属性和YAML文件的加载方式进行两项重大更改:

  1. 文档将按其定义的顺序加载。

  2. 无法再从特定于配置文件的文档激活配置文件。

实际上,这种变化使得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

test=value
spring.profiles.active=local
#---
spring.config.activate.on-profile=dev
test=overridden value

请注意文档分隔符 ()。这允许您在文件中具有与在文件中类似的覆盖逻辑。#---.properties.yml

同样,此信息和其他信息在相关的更新帖子中提供。

1 如果先前的弃用是任何指示符,则应最早或最迟删除该属性,后者更有可能(并且自 起弃用)。2.5.02.6.02.5.x


答案 2

您可以使用spring.config.importclasspath:

spring.config.import=classpath:application-DEV.yml,classpath:application-auth.yml

推荐