Warm tip: This article is reproduced from serverfault.com, please click

java-在 spring boot 2.4.0 版本中包含配置文件

(java - Including profiles in spring boot 2.4.0 version)

发布于 2020-11-19 08:09:47

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

# Profiles    
spring.profiles.include=auth

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

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

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

提前致谢!

Questioner
misnomer42
Viewed
0
user991710 2021-04-01 16:56:45

如果你的配置处理以不兼容的方式更改并且你希望使用“传统”处理方式,你可以通过设置重新启用它:

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 文件的方式进行两项重大更改:

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

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

这一变化实际上使什么覆盖什么什么时候逻辑相当容易消化,但导致不得不禁用某些功能。例如:

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 Boot2.4.0还增加了对多文档属性文件的支持,如下所示:

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

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

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

1如果先前的弃用是任何指标,则应2.5.0最早或2.6.0最迟删除该属性,后者更有可能(从 开始弃用2.5.x)。