Spring Boot 3.0正式发布及新特性解读

官网

新特性解读:Springboot3.0新特性解读

Spring Boot 最新最全的实战代码已上传 Github:Spring Boot3实战


Spring Boot 3.0简介

**Java17+Spring6+Maven3.5/Gradle7.3**

  1. JDK要求最低版本Java17
  2. SpringBoot3底层默认依赖Spring6
  3. 支持 Jakarta EE 10,由于 Java EE 已经变更为 Jakarta EE,包名以 javax开头的需要相应地变更为jakarta
  4. Tomcat10版本
  5. 支持 GraalVM 原生镜像 ,GraalVM 是 Oracle 在 2018 年发布的一个全新的通用全栈虚拟机,并具有高性能、跨语言交互等逆天特性,支持云原生,官网:https://www.graalvm.org/
    image

SpringBoot3将强力合体Java17,采用全新的Spring6版本,Maven支持也提高到了3.5、Gradle提高到了7.3。版本管理器默认也换成了grandle,grandle国内的下载速度慢。
同时发布更新的还有 2.7.x 和 2.6.x 两条版本线,Spring Boot 是我见过的发版最守时的技术框架之一。
Spring Boot 3.0 现已正式发布,它包含了 12 个月以来 151 个开发者的 5700 多次代码提交。这是自 4.5 年前发布 2.0 以来,Spring Boot 的第一次重大修订。

它也是第一个支持 Spring Framework 6.0 和 GraalVM 的 Spring Boot GA 版本,同时也是第一个基于 Java 17 的 Spring Boot 版本,以 Jakarta EE 9 为基准并支持 Jakarta EE 10。同时借助于 GraalVM 支持了 AOT 和 Native Image。

JDK调整

首先要升级你的 JDK 到 JDK17,如果你要使用 Native Image 特性,要使用 GraalVM 22.3 以上和 Native Build Tools Plugin 0.9.17 或更高的版本。

平滑升级

这里不建议直接从低于 Spring Boot 2.7 的版本直接升级到 Spring Boot 3.0。不然新特性和 API 变更太多,就需要你修改大量的配置,升级路径会过于陡峭。建议通过小版本号分阶段升级到 2.4、2.6、2.7,最后再到 3.0。

依赖调整

Spring Boot3.0 下依赖组件的版本要求也不尽相同,比如 Spring Boot Kafka Starter 可能对 Kafka 有什么要求,这要求你进行充分评估。Spring Cloud 体系应该在对应的 Spring Boot 3.0 体系发布后进行升级

一旦上面的工作准备完毕,你就可以开始尝试升级到 Spring Boot 3.0 了。

最低环境要求

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 的应用改动也不小。

配置属性兼容

除此之外,Spring Boot 管理的大量第三方的技术依赖也有大幅度的的升级,具体可以参考官方版本发布文档:

https://github.com/spring-projects/spring-boot/releases/tag/v3.0.0

在 Spring Boot 3.0 中,一些配置属性被重新命名/删除了,开发人员需要相应地更新他们的application.properties或者application.yml。为了帮助你做到这一点,Spring Boot 3.0 提供了一个spring-boot-properties-migrator模块。一旦作为依赖关系添加到你的项目中,它不仅会在启动时分析你的应用程序的环境并打印诊断结果,而且还会在运行时为你临时迁移属性。把下面这个加入pom.xml以帮助你升级兼容配置属性:

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-properties-migrator</artifactId>
 <scope>runtime</scope>
</dependency>

完成迁移之后,务必要移除spring-boot-properties-migrator依赖。

提高应用可观察性

Spring Boot 3.0 通过 Micrometer 和 Micrometer 追踪提高应用可观察性,支持集成 Micrometer 1.10+,引入了的全新的可观察 API 并自动配置 Micrometer 追踪,包括对 Brave、OpenTelemetry、Zipkin 和 Wavefront 组件的支持。

使用 Micrometer 可观察 API 时,完成观察后,可将观察数据主动报告给 Zipkin 等组件,并支持自定义追踪参数配置,这个新特性可以更好地帮助我们了解并监控应用的健康状况。

Jakarta EE

由于 Java EE 已经变更为 Jakarta EE,包名以 javax开头的需要相应地变更为jakarta。这里建议通过 Intellij IDEA 2021.2 提供的内置功能批量处理即可:
image

当然你也可以手动去变更包名。

升级的关键变更

Spring Boot 3.0 有一些关键改变,这些改变将与大多数应用程序有关。所以开发者要仔细阅读这些变更。

自动配置文件变更
Spring Boot 2.7 引入了一个新的文件:
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
用于注册自动配置,同时保持与 spring.factories 中注册的向后兼容。Spring Boot 3.0 发布后,spring.factories已经被移除,只能通过imports文件来注册自动配置。

支持 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+。

Spring Boot 3.0 支持 GraalVM 原生镜像后,它甚至取代了实验性的 Spring Native 项目:

Spring Boot 最新支持版本

image
image
image
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 了。

商业支持最低也得 Spring Boot 2.4+,2.4 以下版本没有任何支持了,话说你们用的哪个 Spring Boot 版本呢?

但是,我觉得现在还是会有很多公司大量使用 Spring Boot 2.3 及以下的版本,因为版本更新太快,升级兼容太麻烦了,也怕影响线上业务,公司都是求业务稳定,除非是遇到重大漏洞(但也可以增量升级),一般都会保守升级。

之前就有粉丝问公司还用着 1.x 和 2.0.x 及其他低版本的 Spring Boot 有没有问题,这要看情况吧,如果是内部系统,不提供外网访问,或许没啥问题,如果是公网系统,建议还是使用正在维护的稳定版本。

Spring Boot 现在已经成为了实事上的脚手架框架了,让学习和开发变得更简单,同时这版本的淘汰节奏也让我感觉技术更新实在太快了,所以我们也要不断保持学习,不然也会跟着淘汰。

迁移指南

Spring Boot的一个主要版本,因此升级现有应用程序可能比平时更复杂一些。官方整理了一份专门的迁移指南(迁移指南地址:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide),以帮助升级现有的 Spring Boot 2.7 应用程序。如果你当前运行的是早期版本的 Spring Boot,建议先升级到 Spring Boot 2.7,然后再迁移到 Spring Boot 3.0。
新版本的亮点包括:

最低要求 :

Java 17 和 Java 19 支持 :Spring Boot 3.0 要求 Java 17 作为最低版本。如果你当前使用的是 Java 8 或 Java 11,则需要先升级 JDK,然后才能开发 Spring Boot 3.0 应用程序。Spring Boot 3.0 运行良好,并已通过 JDK 19 测试。
支持用 GraalVM 生成原生镜像,取代了实验性的 Spring Native 项目 :Spring Boot 3.0 应用程序现在可以转换为 GraalVM native images,这可以提供显着的内存和启动性能改进。支持 GraalVM Native Images 是整个 Spring 产品组合中的一项重大工程工作。要开始使用 GraalVM native images,可参阅更新后的 Spring Boot 参考文档。
通过 Micrometer 和 Micrometer 跟踪改进可观察性 :Spring Boot 3.0 支持在 Micrometer 1.10 中引入的新的 observation APIs。新的 ObservationRegistry 接口可用于创建观测值,该 observations 为度量和跟踪提供了单个 API。Spring Boot 现在为您自动配置ObservationRegistry实例。并且,Spring Boot 现在为您自动配置 Micrometer Tracing。这包括对 Brave、opentelemeter、Zipkin 和 Wavefront 的支持。
支持具有 EE 9 baseline 的 Jakarta EE 10 :对于所有依赖项,Spring Boot 3.0 已从 Java EE 迁移到 Jakarta EE api。

你可在 Spring Boot 的官方 wiki 中找到 3.0 版本的全面详细的新功能/新改进介绍,地址:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes。

posted @ 2023-04-09 14:45  Jimmyhus  阅读(9866)  评论(0编辑  收藏  举报