Spring Boot 2.4.0 发布,配置文件重大调整,不要乱升级!!

简介: 前段时间 Spring Boot 2.4.0 发布了,栈长作了一个新特性全盘解读,其中介绍了一个很重要的变革,那就是配置文件。配置文件可是每个框架的核心,不得不搞清楚,所以,这篇栈长就带大家深入实战了解下 Spring Boot 2.4 配置文件都有哪些具体变更,以及如何迁移,已助你决定是否迁移到 Spring Boot 2.4。

前段时间 Spring Boot 2.4.0 发布了,栈长作了一个新特性全盘解读,其中介绍了一个很重要的变革,那就是配置文件。


配置文件可是每个框架的核心,不得不搞清楚,所以,这篇栈长就带大家深入实战了解下 Spring Boot 2.4 配置文件都有哪些具体变更,以及如何迁移,已助你决定是否迁移到 Spring Boot 2.4。


概要

Spring Boot 2.4 改进了处理 application.properties 和 application.yml 配置文件的方式。更新后的逻辑旨在简化和合理化外部配置的加载方式,但有些参数的组合形式却得到了限制,升级请谨慎。


如果你的应用工程只有一个简单的 application.properties 或 application.yml 文件,则可以进行无缝升级到 Spring Boot 2.4.0。


但是,如果你的配置较为复杂,比如说有指定 profile 的参数,或者有基于 profile 激活的参数,要使用新功能就需要进行一些更改。


更多细节可参考:


https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Config-Data-Migration-Guide


变更细节

1、YAML 配置排序变更

如果你在 application.yml 配置中启用了多套配置(即用 --- 分隔的多套配置),那就需要注意了,因为在 Spring Boot 2.4 中,配置参数是按在配置文件中定义的顺序先后进行加载的,因为在 Spring Boot 2.3 及之前的版本中,各个配置参数是基于 "profile" 的激活的顺序来加载的,后面激活加载的参数会覆盖之前的。


如果你有一些配置参数,它们之间又是互相覆盖,那就要确保所需要的参数要放在文件最后。


如在 Spring Boot 2.3 中:

spring:
  profiles:
    active:
      - prod
      - prodmq
      - proddb
---
spring:
  profiles: prod
env: prod  
---
spring:
  profiles: proddb
env: proddb
---
spring:
  profiles: prodmq
env: prodmq  

Spring Boot 基础构建及 profile 基本介绍这里就不介绍了,关注公众号Java技术栈回复关键字 "boot",可以阅读我写的几十篇往期实战文章。


Spring Boot 教程和示例代码已上传到 Github:


https://github.com/javastacks/spring-boot-best-practice


回到上面的配置,如果同时启用多个 profile 的话,后面的会覆盖前面的,即 proddb 里面的配置参数会覆盖 prodmq 的,所以 env 的值为:proddb。


而如果升级到了 Spring Boot 2.4,env 的值则为:prodmq,因为按顺序加载的话 prodmq 中的 env 在配置文件中最下方。


所以,如果升级到 Spring Boot 2.4,就需要检查 "profile" 这些配置参数之间的关系,可能还需要对 YAML 中的配置重新排序。


2、Profile 配置覆盖变更

如果你使用了 JAR 外部化配置,并且也使用了基于 "profile" 的特定配置文件,那你就要检查下配置是否按预期加载了。


因为在之前的版本中,JAR 包外部的 application.properties 配置文件不会覆盖 JAR 包里面的基于 "profile" 的 application-xxxprofile.properties 配置文件。


从 Spring Boot 2.4 开始,外部化配置参数会覆盖内部的配置参数(不管是否基于 "profile" 激活),这个也是修复 Spring Boot 上的的一个 Issue:


https://github.com/spring-projects/spring-boot/issues/3845


这个问题的就是指 JAR 包外部的应用程序参数应优先于 JAR 包内部的特定激活的配置参数。


3、Profile 配置参数变更

如果你使用了 spring.profiles 属性指定了多套 YMAL 配置文件,现在需要使用新参数替代:


spring.config.activate.on-profile


配置示例:

---
spring.config.activate.on-profile: dev
env: dev
server:
  port: 8080
---
spring.config.activate.on-profile: test
env: test
server:
  port: 8081
---
spring.config.activate.on-profile: prod
env: prod
server:
  port: 8082
---
spring.config.activate.on-profile: proddb
db:
  name: mysql
env: proddb
---
spring.config.activate.on-profile: prodmq
mq:
  address: localhost
env: prodmq

和之前的逻辑一样,可以继续使用 spring.profiles.active 来激活特定的 profiles 列表,或者也可以使用表达式激活,如:prod & cloud,但是不能和 spring.config.activate.on-profile 结合使用。


另外,如果你之前使用了 spring.profiles.include 和 spring.profiles 结合使用,就需要使用新的 "profile group" 特性了。


配置 profile group 组示例:

spring:
  profiles:
    active:
      - prodall
    group:
      prodall:
        - prod
        - prodmq
        - proddb

这样就定义了一个 "prodall" 组,包含了 prod, proddb, prodmq 三个 profile,同时在配置文件中直接使用 spring.profiles.active 来激活 "prodall" 组,这样就同时激活了 prod, proddb, prodmq。


4、回归传统模式

如果你想继续使用 Spring Boot 2.3 的配置文件逻辑,或者还没准备好迁移到 Spring Boot 2.4,也可以通过在 application.properties 或者 application.yml 配置文件中添加以下参数回到传统模式:


spring.config.use-legacy-processing = true


如果不指定这个参数为:true,那么在 Spring Boot 2.4 中就是默认新的配置文件处理逻辑。


总结

总结下来,个人感觉某些变更着实没什么卵用,但也不得不跟上它的节奏。


所以大家一定要注意了,迁移到 Spring Boot 2.4,需要注意文中的配置变更细节,一定要对所有变更内容做调整,不然参数加载会受到影响。


本节所有实战源代码示例已上传至 Github:


https://github.com/javastacks/spring-boot-best-practice


好了,今天的分享就到这里了,单看官方文档还不是很清楚,栈长也是对配置升级的细节做了各个实践才明白其中的奥妙,希望对大家有帮助。


欢迎大家 Star 关注,后续会不断更新。


学习更多 Spring Boot 教程,请关注公众号Java技术栈,后面栈长还会继续推送一些 Spring Boot 2.4 新特性实战文章。在公众号后台回复:boot,历史 Spring Boot 教程我也都整理好了。


最后,别忘了点在看、转发哦,需要你的鼓励~


相关文章
|
2月前
|
消息中间件 NoSQL Java
spring boot2升级boot3指南
本文介绍了如何将Spring Boot 2.x升级至Spring Boot 3.x,涵盖使用OpenRewrite自动化重构工具进行代码转换、依赖版本升级、配置属性调整及常见问题处理等内容,帮助开发者高效完成升级工作。
1242 6
|
7月前
|
人工智能 Java API
MCP协议重大升级,Spring AI Alibaba联合Higress发布业界首个Streamable HTTP实现方案
本文由Spring AI Alibaba Contributor刘军、张宇撰写,探讨MCP官方引入的全新Streamable HTTP传输层对原有HTTP+SSE机制的重大改进。文章解析Streamable HTTP的设计思想与技术细节,并介绍Spring AI Alibaba开源框架提供的Java实现,包含无状态服务器模式、流式进度反馈模式等多种场景的应用示例。同时,文章还展示了Spring AI Alibaba + Higress的完整可运行示例,分析当前实现限制及未来优化方向,为开发者提供参考。
|
8月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `<appender>` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `<logger>` 和 `<root>` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
2126 1
|
XML Java 数据格式
Spring从入门到入土(xml配置文件的基础使用方式)
本文详细介绍了Spring框架中XML配置文件的使用方法,包括读取配置文件、创建带参数的构造对象、使用工厂方法和静态方法创建对象、对象生命周期管理以及单例和多例模式的测试。
677 7
Spring从入门到入土(xml配置文件的基础使用方式)
|
6月前
|
druid Java 关系型数据库
Spring Boot与Druid升级解决方案
好的,我需要帮助用户解决他们遇到的数据库连接问题,并升级项目的依赖。首先,用户提供的错误信息是关于Spring Boot应用在初始化数据源时抛出的异常,具体是Druid连接池验证连接失败。同时,用户希望升级项目的依赖版本。
654 10
|
10月前
|
XML Java 应用服务中间件
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
2578 17
Spring Boot 两种部署到服务器的方式
|
8月前
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——指定项目配置文件
在实际项目中,开发环境和生产环境的配置往往不同。为简化配置切换,可通过创建 `application-dev.yml` 和 `application-pro.yml` 分别管理开发与生产环境配置,如设置不同端口(8001/8002)。在 `application.yml` 中使用 `spring.profiles.active` 指定加载的配置文件,实现环境快速切换。本节还介绍了通过配置类读取参数的方法,适用于微服务场景,提升代码可维护性。课程源码可从 [Gitee](https://gitee.com/eson15/springboot_study) 下载。
352 0
|
10月前
|
Java 测试技术 应用服务中间件
Spring Boot 配置文件总结
Spring Boot 提供全局配置文件 `application.properties` 和 `application.yml`,用于修改自动配置的默认值。前者使用键值对配置,后者使用缩进和冒号。不同环境(开发、测试、生产)可切换配置文件,通过 `spring.profiles.active` 指定。例如,开发环境端口为4790,测试环境为4791,生产环境为4792。配置示例展示了属性、List、Map定义及引用方法。
346 14
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
11月前
|
XML Java 数据格式
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
本文介绍了在使用Spring框架时,如何通过创建`applicationContext.xml`配置文件来管理对象。首先,在resources目录下新建XML配置文件,并通过IDEA自动生成部分配置。为完善配置,特别是添加AOP支持,可以通过IDEA的Live Templates功能自定义XML模板。具体步骤包括:连续按两次Shift搜索Live Templates,配置模板内容,输入特定前缀(如spring)并按Tab键即可快速生成完整的Spring配置文件。这样可以大大提高开发效率,减少重复工作。
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式

热门文章

最新文章