大家周末愉快啊,Spring Boot 2.3.5 没发布几天,你看,还是 1 周前发布的:
昨天又有粉丝留言说 Spring Boot 2.4.0 已经发布了:
我了个去,栈长赶紧跑到 Spring Boot 官网看了下,果然 2.4.0 了,我顿时傻眼了,又得写文章了,看来我消息还是稍微有点滞后了…
Spring Boot 2.4.0 这么快就发布了,又是周末来给大家推送,我印象中都是周末推……
Spring Boot 更新也太快了,很多同学表示学不来了,学不动了。学不动也要学啊,不然就要被淘汰了,Java技术栈所有 Spring Boot 教程和示例源码都上传到 Github 了,欢迎 Star:
https://github.com/javastacks/spring-boot-best-practice
好吧,还是例行公事,接下来栈长带大家来解读下 Spring Boot 2.4.0 到底更新了什么鬼?
切记!!!
这个版本不要轻易升级!!!
下面注意仔细看完哦。。。
一、支持 Java 15
Spring Boot 2.4.0 支持 Java 15 了,同时向下兼容 Java 11 和 Java 8。
二、依赖升级
Spring Boot 2.4.0 升级了一些主要的 Spring 项目:
Spring AMQP 2.3
Spring Batch 4.3
Spring Data 2020.0
Spring Framework 5.3
Spring HATEOAS 1.2
Spring Integration 5.4
Spring Kafka 2.6
Spring Retry 1.3
Spring Security 5.4
Spring Session 2020.0
另外,还尽可能升级了一些第三方库到最新稳定版本:
Artemis 2.13
AssertJ 3.18
Cassandra Driver 4.7
Elasticsearch 7.9
Flyway 7
Jersey 2.31
JUnit 5.7
Liquibase 3.10
Lettuce 6.0
Micrometer 1.6
Mockito 3.4
MongoDB 4.1
Oracle Database 19.7
Reactor 2020.0
RSocket 1.1
Undertow 2.2
……
三、配置改进
1、改进配置文件的处理方式
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
如果你想继续使用 Spring Boot 2.3 的配置逻辑,也可以通过在 application.properties 或者 application.yml 配置文件中添加以下参数:
spring.config.use-legacy-processing = true
2、导入配置参数改进
通过配置参数 spring.config.location 和 spring.config.import 来指定或者导入配置文件时,如果配置文件不存在,现在不是只能默默地失败了,可以通过添加 optional: 前缀来标识它是可选的。
比如我们从 /etc/config/application.properties 指定配置文件,如果这个文件不存在,系统就会跳过它。
spring.config.location=optional:/etc/config/application.properties
如果你想将所有指定的配置文件都默认为可选的,可以通过 SpringApplication.setDefaultProperties(…) 来设置
spring.config.on-location-not-found=ignore 这个参数,或者将它设置在系统环境变量中。
3、支持导入配置树
新版本的 spring.config.import 属性还可以用于导入配置树,通过与 Kubernetes 一起使用,配置树是提供键/值对的另一种方法,每一个键值/对都在其自己的文件中声明,文件名是键,文件内容就是值。
另外,从配置树导入的参数默认会带一个换行符。
详细的参考:
具体的配置上的细节暂时没有时间详细研究了,后面有机会再详细介绍一篇,关注公众号Java技术栈第一时间推送。
四、新增启动端点
Spring Boot 2.4.0 添加了一个新的启动端点,用来显示应用启动有关的详细信息,比如可以帮助我们来诊断启动时间比预期更长的 Spring Beans。
这个功能建立在 Spring Framwork 5.3 最近添加的应用程序启动跟踪特性的基础上,感兴趣的可以在 Spring 框架文档中阅读有关该功能的更多信息。
五、新增起源链(Origin Chains)
Origin 接口更新了,使用了全新的 getParent() 方法,这样就可以提供完整的参数起源链,以准确显示某一项参数的来源。
比如你在 application.properties 配置文件中使用 spring.config.import 来导入第二个配置文件的参数,从第二个配置文件加载的参数的 Origin 将具有一个指向原始导入声明的父级。
说白了就是可以看到参数从哪里导进来的,可以通过 actuator/env 或者 actuator/configprops 端点来查看与之相关的输出信息,这里暂不详细研究了,后面有机会再详细介绍一篇,关注公众号Java技术栈第一时间推送。
六、Docker 支持升级
1、镜像发布
Spring Boot Maven 插件的 spring-boot:build-image 指令和 Gradle 插件的 bootBuildImage 任务现在可以直接发布 Docker 镜像到 Docker 注册中心了。
2、授权机制
当使用 Spring Boot 构建时,可以为构建器或者运行镜像使用私有授权的 Docker 私有注册中心,支持用户名/密码认证以及基于 Token 机制认证。
更多详细的配置可以参考对应的插件文档:
Maven:
Gradle:
七、移除了 JUnit 5’s Vintage 引擎
Spring Boot 2.4.0 从 spring-boot-starter-test 中移除了 JUnit 5 Vintage 引擎,JUnit 5 可以通过 vintage 引擎来运行 JUnit 4 编写的测试用例,说白了就是兼容 JUnit 4 呗。
如果你不想迁移测试用例到 JUnit 5 而继续使用 JUnit 4,添加以下 Maven 依赖即可:
<dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> </exclusion> </exclusions> </dependency>
以下为对应的 Gradle 配置:
testImplementation("org.junit.vintage:junit-vintage-engine") { exclude group: "org.hamcrest", module: "hamcrest-core" }
八、其他更新
Spring Boot 2.4.0 发布更新说明中还包括了许多其他的更新和改进,比如说在 Spring Boot 2.4.0 中标识了在下个版本中计划废弃的不推荐使用的类和方法等。
以上就是 Spring Boot 2.4.0 的主要变更内容,当然还有许多发布细节,感兴趣的可以研究下这个更新说明:
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.4-Release-Notes
总结
终于写完了,又肝了一个晚上!!
可以看出 Spring Boot 2.4.0 的变更还是蛮大的,特别是在配置文件、配置参数的处理,还有许多框架的重大版本升级。
切记不要轻易升级到这个版本,如需升级,最好是详细看清楚变更内容,做好充分测试,以免年终奖没了。。
关于更多的细节暂时没时间深入研究了,后续栈长有时间再深入研究下,给大家带来更详细的技术文章,关注公众号Java技术栈第一时间推送。