Spring Boot 2.4对配置文件进行了重大改变


Spring Boot 2.4在加载application.properties和application.yml文件的方式方面带来了一些有趣的变化。在Spring Boot 2.4中,对属性和YAML文件的加载方式进行两项重大更改:

  1. 文档将按照定义的顺序加载。
  2. 不能再从特定于配置文件的文档中激活配置文件。

 
从Spring Boot 2.4开始,将有一个简单的规则可以在加载属性和YAML文件时应用:在文件中声明为较低的属性将覆盖较高的属性。类似向Map放入数据,后面覆盖前面。
test: "value"
---
test: "overridden-value"

 
application.properties中加入类似YAML的多文档配置,使用带有熟悉的三个破折号的注释来拆分文档:
test=value
#---
test=overridden-value

 
如果我们只想在dev配置文件处于活动状态时覆盖test值,则可以使用以下命令:
test=value
#---
spring.config.activate.on-profile=dev
test=overridden-value

 
以下文件现在将引发异常:
test=value
#---
spring.config.activate.on-profile=dev
spring.profiles.active=local # will fail
test=overridden value

希望这一新限制最终将使您application.properties和application.yml文件更易于推理和理解。我们也希望它可以使Spring Boot本身更易于管理和维护。但是,我们知道至少有一个有效的用例,人们希望将一个配置文件扩展为多个子配置文件。为了支持这一点,我们添加了一个称为“配置文件组”的功能。
 
配置文件组是Spring Boot 2.4中的一项新功能,可让您将单个配置文件扩展为多个子配置文件:
spring.profiles.group.prod = proddb,prodmq,prodmetrics

在Spring Boot 2.4中提供的主要功能是对导入其他配置的支持:

application.name = myapp 
spring.config.import = developer.properties

 
导入定义使用类似URL的语法作为其值。如果您的位置没有前缀,则将其视为常规文件或文件夹。但是,如果使用configtree:前缀,则会告诉Spring Boot您希望在该位置使用Kubernetes样式卷安装的配置树:
spring.config.import=configtree:/etc/config

 
云平台激活:
spring.config.activate.on-cloud-platform=kubernetes
spring.config.import=configtree:/etc/config