赞
踩
历史文章(文章累计450+)
走进SpringBoot源码吃透Spring扩展点「扩展点实战系列」- 第450篇
5个月的精华:Spring/SpringBoot扩展点手册:手册在手,编码无忧:全网独一份 - 第451篇
SpringBoot添加外部jar包及打包(亲测有效) - 第452篇
SpringBoot引入外部jar包,项目打包成war包发布(亲测有效) - 第453篇
SpringBoot中使用Spring-Retry重试框架 - 第454篇
Spring的秒表StopWatch优雅的程序计时器 -第455篇
没想到,坚挺了两个星期之后,还是阳了。
公司在前两个星期已经有些人陆续阳了,我一直没有阳,没想到还是不能逃过一劫。
原本这一周实在不想发的,但虽然阳了,但好像不是太严重,目前1天半的症状就是发高烧,全身乏力。
最后我想说的是对新冠要有敬畏之心,这病毒这么多年能把社会搞的这么乱,也不是啥也不是。保护好自己,保护家人。
导读
从 2018 年 2 月 28 号发布 Spring Boot 2.0 版本开始,整个 2.X 版本已经经过了 4 年多的时间,累计发布了 95 个不同的版本,而就在前不久,2.X 系列的也已经迎来了他的最终版本:2.7。
而现在,Spring Boot 3.0 也要来了!
一、Spring Boot 3.0重大特性
时隔四年多,Spring Boot 3.0 这是一个断崖式的版本更新,这四年多的时间,技术日新月异,无疑更新了太多的特性,也修复了海量的bug 的性能提升,今天栈长就聊聊 Spring Boot 3.0 的几个重大新特性。
1.1最低环境要求
Spring Boot 3.0 最低要求 Java 17,并向上兼容支持 Java 19。
所以,如果你想升级 Spring Boot 3.0,请确保你的 JDK 版本是否符合要求,毕竟现在大部分人还是用的 Java 8,升级 JDK 版本不是一件小事,虽然现在 Java 17+ 是免费使用的,但不确定哪个时间点会收费,也可以转战 OpenJDK 或者其他开源的 JDK 版本。
另外,Spring Boot 3.0 已将所有底层依赖项从 Java EE 迁移到了 Jakarta EE API,基于 Jakarta EE 9 并尽可能地兼容 Jakarta EE 10。因为早在几年前 Java EE 已经正式更名为 Jakarta,所以,所有相关的名称都变了,包括包名,所以使用了 Java EE 的应用改动也不小。
要求 | 说明 | |
JDK | JDK 17 | 兼容JDK 18 |
Spring | Spring Framework 6.0.0 | 或更高版本 |
Maven | 3.5+ | |
servlet | 5.0+ | |
Tomcat | 10.0 | |
IntelliJ IDEA | 2021.2.1 |
1.2大量依赖升级
Spring Boot 3.0 最低支持的 Spring 框架也变成了 Spring 6.0.2+,虽然是框架自动集成依赖的,但需要注意这点,因为前段时间发布的 Spring 6.0 也有不少的底层升级。
除此之外,Spring Boot 管理的大量第三方的技术依赖也有大幅度的的升级,具体可以参考官方版本发布文档:
https://github.com/spring-projects/spring-boot/releases/tag/v3.0.0
1.3支持 GraalVM 原生镜像
GraalVM 是 Oracle 在 2018 年发布的一个全新的通用全栈虚拟机,并具有高性能、跨语言交互等逆天特性,不仅支持了 Java、Scala、Groovy、Kotlin 等基于 JVM 的语言,以及 C、C++ 等基于 LLVM 的语言,还支持其他像 JavaScript、Ruby、Python和 R 语言等。
Spring Boot 3.0 应用现在可以支持转换为 GraalVM 原生镜像了,这可以提供显著的内存和启动性能改进,能支持 GraalVM 原生镜像也是整个 Spring 产品组合中的一项重大能力的提升。
Spring Boot 3.0 最低支持 Graal 22.3+ 和 Native Build Tools Plugin 0.9.17+。
1.4提高应用可观察性
Spring Boot 3.0 通过 Micrometer 和Micrometer 追踪提高应用可观察性,支持集成 Micrometer 1.10+,引入了的全新的可观察 API 并自动配置 Micrometer 追踪,包括对 Brave、OpenTelemetry、Zipkin 和 Wavefront 组件的支持。
使用 Micrometer 可观察 API 时,完成观察后,可将观察数据主动报告给 Zipkin 等组件,并支持自定义追踪参数配置,这个新特性可以更好地帮助我们了解并监控应用的健康状况。
1.5 Spring Boot最新支持版本
Spring Boot 的最新版本支持情况:
版本 | 发布时间 | 停止维护时间 | 停止商业支持 |
3.0.x | 2022-11-24 | 2023-11-24 | 2025-02-24 |
2022-05-19 | 2023-11-18 | 2025-02-18 | |
2021-12-17 | 2022-11-24 | 2024-02-24 | |
2021-05-20 | 已停止 | 2023-08-24 | |
2020-11-12 | 已停止 | 2023-02-23 | |
2020-05-15 | 已停止 | 已停止 | |
2019-10-16 | 已停止 | 已停止 | |
2018-10-10 | 已停止 | 已停止 | |
2018-03-01 | 已停止 | 已停止 | |
2017-01-30 | 已停止 | 已停止 |
Spring Boot 2.5.x 这条版本线在今年 5 月份已经停止维护了,免费维护能用的也就 Spring Boot 2.6 及以上的版本了,并且,随着 Spring Boot 3.0 的发布,Spring Boot 2.6.x 也要相继停止维护了,到时能用的就 2.7.x 和 3.0.x 了。
1.5删除的支持
l Apache ActiveMQ
l Atomikos
l EhCache 2
lHazelcast 3
二、JDK17
Spring Boot 3版本最低支持 Java17,这里介绍一下关于 Java17 之后的一些重要改变。
2.1 record
record 是在 Java14中引入的
https://openjdk.org/jeps/395
以前我们写一个类需要写一堆 get、set 方法,后来有了lombok之后这些都省了,现在 Java 给我们提供了原生的写法。
public record User() {}
本质上 record 修饰之后的类就是一个 final 类,而且他的父类不是 Object,而是 java.lang.Record。
record 类属性只能声明在头部,所有的成员变量都是 public final 的,而且只能声明静态属性,但是可以声明成员方法和静态方法。
2.2 text blocks
text blocks 文本块是在 Java13 引入的,并且在 Java15 版本成为永久特性
以前我们复制一个多行的字符串到Java 里,会自动加上行终止符。
而有了文本块的功能之后,可以帮助我们更方便的定义包含多行文本的字符串字面量,他使用三引号作为开始和结束的分隔符。
2.3 switch表达式
switch表达式是在 Java12 中引入的,在 Java14 成为永久特性。
升级后的 switch 其实包含两个特性,一个是允许 case 使用多个常量,另外一个就是有返回值。
新增case x-> 语法,使用方面更加简洁,而且不需要再每个 case 写一个 break了。
2.4 Jakarta EE 9
另外一个很重要的变化就是本次升级之后,最低只支持 Jakarta EE 9,使用 Servlet5.0 和 JPA3.0 规范,不过最新版本RC2已经升级到了 JakartaEE 10,默认使用 Servlet6.0 和 JPA3.1 规范。
有些同学可能连 Jakarta 是什么都不知道,这个英文单词是印尼首都雅加达的意思,其实就是我们知道的JavaEE 改名之后就叫 JakartaEE,比如我们之前的javax.servlet包现在就叫jakarta.servlet。
也因此,代码中所有使用到比如HttpServletRequest 对象的 import 都需要修改。
2.5 其它特性简述
(1)本地变量类型推断
在Java 10中,提供了本地变量类型推断的功能,可以通过var声明变量。
(2)instanceof 模式匹配
Java 14带来了改进版的instanceof操作符,这意味着我们可以用更简洁的方式写出之前的代码例子。
三、为什么是 Java 17
么多新版本的 JDK,而且2022年还会推出 JDK 18 和JDK 19,为什么 Spring 选择了 JDK 17呢。主要是因为他是一个 LTS版本,所谓 LTS,是 Long Term Support,也就是官方保证会长期支持的版本。从JDK 诞生到现在,还在长期支持的版本主要有 JDK 7、JDK 8 、JDK 11以及 JDK 17
这一次 Spring直接跨越了 JDK 11,升级到 JDK 17,主要的考虑应该是因为JDK 17有更多的新特性支持。
四、SpringBoot 官方文档
4.1文档下载
SpringBoot官方文档下载地址
https://docs.spring.io/spring-boot/docs/current/reference/
4.2官方文档
SpringBoot中文官方文档
https://spring.io/projects/spring-boot#learn
4.3代码
SpringBoot源码Github下载地址
https://github.com/spring-projects/spring-boot/releases
最后的最后
现在Spring Boot都升级到了3.x版本了,我的项目需要升级吗?
博主想说的是技术是确保稳定性,而不是技术的最新性,不要一味图当下爽,升级的过程有坑让你踩。
当然如果可以的话,还是要贴近一些版本的,比如当下是2.3的版本,升级到2.7,这个的应该是比较轻松的事情,毕竟框架有问题才会进行迭代,另外新的版本有新的特性。
这一次 Spring直接跨越了 JDK 11,升级到 JDK 17,主要的考虑应该是因为JDK 17有更多的新特性支持。
四、SpringBoot 官方文档
4.1文档下载
SpringBoot官方文档下载地址
https://docs.spring.io/spring-boot/docs/current/reference/
4.2官方文档
SpringBoot中文官方文档
https://spring.io/projects/spring-boot#learn
4.3代码
SpringBoot源码Github下载地址
https://github.com/spring-projects/spring-boot/releases
最后的最后
现在Spring Boot都升级到了3.x版本了,我的项目需要升级吗?
博主想说的是技术是确保稳定性,而不是技术的最新性,不要一味图当下爽,升级的过程有坑让你踩。
当然如果可以的话,还是要贴近一些版本的,比如当下是2.3的版本,升级到2.7,这个的应该是比较轻松的事情,毕竟框架有问题才会进行迭代,另外新的版本有新的特性。
\(^o^)/~你的小小鼓励,是博主坚持的动力,点个赞再走呗~
祝阳了,早点杨康;杨过了不再阳,没阳的无敌霸体。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。