Spring Boot 2.4版本前后的分组配置变化及对多环境配置结构的影响

简介: Spring Boot 2.4版本前后的分组配置变化及对多环境配置结构的影响

前几天《Spring Boot 2.4 对多环境配置的支持更改》一文中,给大家讲解了Spring Boot 2.4版本对多环境配置的配置变化。除此之外,还有一些其他配置变化,所以今天我们就继续讲讲其他的更新内容!

spring.profiles.include对于这个配置项,你是否熟悉呢?从字面意思也不难理解,应该就是用来引入一些其他配置的配置(因为有个include嘛),实际作用也确实如此!

当我们的应用有很多配置信息的时候,比如当用到了很多中间件MySQL、Redis、MQ等,每个中间件的配置都是一大串的,那么这个时候我们为了配置更简洁一些,可能就会对其做分组。

如果你有用过这样的配置方式,那么在升级2.4版本的时候一定要注意,因为原来的配置方法会失效!

2.4之前的分组配置

先来看看2.4版本之前的分组配置,我们用下面这个例子来介绍:

spring:
  profiles:
    active: "dev"
---
spring.profiles: "dev"
spring.profiles.include: "dev-db,dev-mq"
---
spring.profiles: "dev-db"
db: dev-db.didispace.com
---
spring.profiles: "dev-mq"
mq: dev-mq.didispace.com

其中:

  1. 第一个spring.profiles.active: dev,代表默认激活dev配置
  2. 第二段dev配置中使用了spring.profiles.include来引入其他配置信息,这里模拟一下一个是dev的db配置,一个是dev的mq配置。在2.3和之前版本的时候,我们通常就是这样来分组配置不同中间件的。
spring.profiles: "dev"
spring.profiles.include: "dev-db,dev-mq"

文末我们提供一个样例工程,你可以通过修改spring boot版本到2.3和配置信息使用上面的样例,来启动应用看看这种配置效果。不出意外,你可以在启动日志开头,看到激活的配置信息如下:

The following profiles are active: dev,dev-db,dev-mq

同时激活了dev、dev-db、dev-mq三组配置,include是生效的。

2.4的分组配置

在升级spring boot到2.4之后,再启动之前的应用,你会发现配置就没有生效了,这里不仅是因为spring.profiles失效的原因,即使我们将其都修改为spring.config.activate.on-profile,也依然无法激活dev-db和dev-mq的配置。因为在2.4版本之后,我们需要使用spring.profiles.group来配置了,同时组织结构也发生了变化。

可以尝试把配置修改成如下格式:

spring:
  profiles:
    active: "dev"
    group:
      "dev": "dev-db,dev-mq"
      "prod": "prod-db,prod-mq"
---
spring:
  config:
    activate:
      on-profile: "dev-db"
db: dev-db.didispace.com
---
spring:
  config:
    activate:
      on-profile: "dev-mq"
mq: dev-mq.didispace.com
---
spring:
  config:
    activate:
      on-profile: "prod-db"
db: prod-db.didispace.com
---
spring:
  config:
    activate:
      on-profile: "prod-mq"
mq: prod-mq.didispace.com

启动应用可以在日志开头看到激活的配置组(默认激活的是dev,所以对应的就是dev-db和dev-mq):

The following profiles are active: dev,dev-db,dev-mq

修改spring.profiles.active: "prod"直接切换到另外一个环境。

重启应用可以在日志开头看到激活的配置组:

The following profiles are active: prod,prod-db,prod-mq

可以看到,在2.4版本的配置中,不同环境的配置定义都在第一段默认配置中了,所有的环境定义都转移到了spring.profiles.group的key字段(上面配置了devprod),value字段则代表了每个环境需要加载的不同配置分组。

回忆一下我们《Spring Boot 2.4 对多环境配置的支持更改》中提到的多环境配置,是不是不同环境的配置标识都集中定义在了每个spring.config.activate.on-profile里。而这次分组的配置改变,让激活配置、环境配置集中到了默认配置里,其他的profile定义是环境+配置分组的组合内容。

对于这样的调整,最直观的感受就是选择环境的时候,我不需要往下找有哪些profile就能知道有哪些可选项了,还是方便不少。那么你对这样的配置调整怎么看呢?欢迎留言讨论!

代码示例

本文的相关例子可以查看下面仓库中的chapter1-3目录:

如果您觉得本文不错,欢迎Star支持,您的关注是我坚持的动力!

相关阅读

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
16天前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
37 0
|
2月前
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
21天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
31 2
 SpringBoot入门(7)- 配置热部署devtools工具
|
11天前
|
存储 前端开发 JavaScript
springboot中路径默认配置与重定向/转发所存在的域对象
Spring Boot 提供了简便的路径默认配置和强大的重定向/转发机制,通过合理使用这些功能,可以实现灵活的请求处理和数据传递。理解并掌握不同域对象的生命周期和使用场景,是构建高效、健壮 Web 应用的关键。通过上述详细介绍和示例,相信读者能够更好地应用这些知识,优化自己的 Spring Boot 应用。
23 3
|
19天前
|
Java 数据库连接
SpringBoot配置多数据源实战
第四届光学与机器视觉国际学术会议(ICOMV 2025) 2025 4th International Conference on Optics and Machine Vision
48 8
|
17天前
|
Java 数据库连接 数据库
springboot启动配置文件-bootstrap.yml常用基本配置
以上是一些常用的基本配置项,在实际应用中可能会根据需求有所变化。通过合理配置 `bootstrap.yml`文件,可以确保应用程序在启动阶段加载正确的配置,并顺利启动运行。
41 2
|
26天前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
30 1
|
28天前
|
Java Spring 容器
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
57 3
|
2月前
|
druid Java Maven
|
7月前
|
XML 安全 Java
深入实践springboot实战 蓄势待发 我不是雷锋 我是知识搬运工
springboot,说白了就是一个集合了功能的大类库,包括springMVC,spring,spring data,spring security等等,并且提供了很多和可以和其他常用框架,插件完美整合的接口(只能说是一些常用框架,基本在github上能排上名次的都有完美整合,但如果是自己写的一个框架就无法实现快速整合)。