Spring Boot 2.4.0 发布,配置文件重大调整,不要乱升级!!
前段时间 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:
回到上面的配置,如果同时启用多个 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:
这个问题的就是指 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:
好了,今天的分享就到这里了,单看官方文档还不是很清楚,栈长也是对配置升级的细节做了各个实践才明白其中的奥妙,希望对大家有帮助。
欢迎大家 Star 关注,后续会不断更新。
学习更多 Spring Boot 教程,请关注公众号Java技术栈,后面栈长还会继续推送一些 Spring Boot 2.4 新特性实战文章。在公众号后台回复:boot,历史 Spring Boot 教程我也都整理好了。
最后,别忘了点在看、转发哦,需要你的鼓励~
版权申明:本文系公众号 "Java技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,禁止抄袭、洗稿,请自重,尊重他人劳动成果和知识产权。
近期热文推荐:
1.Java 15 正式发布, 14 个新特性,刷新你的认知!!
2.终于靠开源项目弄到 IntelliJ IDEA 激活码了,真香!
3.我用 Java 8 写了一段逻辑,同事直呼看不懂,你试试看。。
觉得不错,别忘了随手点赞+转发哦!
Spring Boot 2.4.0 发布,配置文件重大调整,不要乱升级!!的更多相关文章
- Spring Boot 2.5.0 发布:支持Java16、Gradle 7、Datasource初始化机制调整
今年520的事情是真的多,娱乐圈的我们不管,就跟DD一起来看看 Spring Boot 2.5.0 的发布吧!看看都带来了哪些振奋人心的新特性和改动! 主要更新 支持 Java 16 支持 Gradl ...
- Spring Boot 2.7.0发布,2.5停止维护,节奏太快了吧
这几天是Spring版本日,很多Spring工件都发布了新版本, Spring Framework 6.0.0 发布了第 4 个里程碑版本,此版本包含所有针对 5.3.20 的修复补丁,以及特定于 6 ...
- Spring Boot 2.5.0 重新设计的spring.sql.init 配置有啥用?
前几天Spring Boot 2.5.0发布了,其中提到了关于Datasource初始化机制的调整,有读者私信想了解这方面做了什么调整.那么今天就要详细说说这个重新设计的配置内容,并结合实际情况说说我 ...
- Spring Boot 2.5.0 重新设计的spring.sql.init 配置有何用?
前几天Spring Boot 2.5.0发布了,其中提到了关于Datasource初始化机制的调整,有读者私信想了解这方面做了什么调整.那么今天就要详细说说这个重新设计的配置内容,并结合实际情况说说我 ...
- Spring Boot 2.1.0 已发布,7 个重大更新!
距离<重磅:Spring Boot 2.0 正式发布!>已经过去大半年了,而 Spring Boot 2.1.0 在 10 月底就发布了,我们来看下 Spring Boot 2.1.0 都 ...
- Spring Boot 2.3.0正式发布:优雅停机、配置文件位置通配符新特性一览
当大潮退去,才知道谁在裸泳..关注公众号[BAT的乌托邦]开启专栏式学习,拒绝浅尝辄止.本文 https://www.yourbatman.cn 已收录,里面一并有Spring技术栈.MyBatis. ...
- Spring Boot 2.4.0正式发布,全新的配置文件加载机制(不向下兼容)
千里之行,始于足下.关注公众号[BAT的乌托邦],有Spring技术栈.MyBatis.JVM.中间件等小而美的原创专栏供以免费学习.分享.成长,拒绝浅尝辄止.本文已被 https://www.you ...
- (转)Spring Boot 2 (九):【重磅】Spring Boot 2.1.0 权威发布
http://www.ityouknow.com/springboot/2018/11/03/spring-boot-2.1.html 如果这两天登录 https://start.spring.io/ ...
- 【重磅】Spring Boot 2.1.0 权威发布
如果这两天登录 https://start.spring.io/ 就会发现,Spring Boot 默认版本已经升到了 2.1.0.这是因为 Spring Boot 刚刚发布了 2.1.0 版本,我们 ...
随机推荐
- MIT 6.S081 Lab5 Copy-On-Write Fork
前言 最近绝大多数的空闲时间都拿来锤15-445了,很久没动6.S081.前几天回头看了一下一个月前锤完的Lazy Allocation,自己写的代码几乎都不认识了.......看来总结之类的东西最好 ...
- vim编辑器使用简介
使用格式 vim [option] /path/to/somefile ... option: -o水平分割 -O垂直分割 +打开后在最后一行 +Num打开后在地Num行,加号与Num之间不能有空格 ...
- PHP修改css文件中的背景图片并下载到本地
扒网站当中一般css中的图片扒不下来,这个脚本就是用来下载这些图片到本地的 流程 1.获取css文件路径 2.打开文件逐行读取判断是否包含需要的图片 2.1 包含则 -进行截取直接获取到相对路径 2. ...
- tensorflow-gpu2.1缺少libcudnn.so.7
下载CUDA对应版本的cuDnn. 下载后在cuDnn/cuda/lib64下有libcudnn.so.7这个文件,把它复制到/usr/local/cuda/lib64/下即可
- CSharpFlink分布式实时计算,OutOfMemoryException异常,你意想不到的原因。
目录 一.测试过程及问题 二.问题排查及分析过程 三.问题分析及解决过程 四.问题解决初步结果 一.测试过程及问题 从昨天15点左右开始测试,1个主节点,10个计算节点,1000个数据点,每个数据点3 ...
- Flink SQL Client综合实战
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 源码分析:同步基础框架——AbstractQueuedSynchronizer(AQS)
简介 AQS 全称是 AbstractQueuedSynchronizer,位于java.util.concurrent.locks 包下面,AQS 提供了一个基于FIFO的队列和维护了一个状态sta ...
- 【C++】递归之二分查找
简单查找的时间复杂度为O(n) 二分查找的时间复杂度为O(logn) 用递归实现二分查找: 基线条件:数组只包含一个元素.如果如果要查找的值与这个元素相同,就找到了:否则说明不在数组中. 递归条件:把 ...
- ASP.NET Core使用HostingStartup增强启动操作
概念 在ASP.NET Core中我们可以使用一种机制来增强启动时的操作,它就是HostingStartup.如何叫"增强"操作,相信了解过AOP概念的同学应该都非常的熟悉.我们常 ...
- php 与 docker php-fpm 共存问题
需求: 本地一个 php7 的 php-fpm,现在需要运行 php5.2版本的程序, 服务器安装的 nginx 解析域名,碰见 php 文件交给 php5的 php-fpm; 注意: fastcgi ...