Spring Boot 3.0 正式发布

同时发布更新的还有 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 提供的内置功能批量处理即可:

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

升级的关键变更

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 最新支持版本

栈长整理了 Spring Boot 的最新版本支持情况:

版本 发布时间 停止维护时间 停止商业支持
3.0.x 2022-11-24 2023-11-24 2025-02-24
2.7.x 2022-05-19 2023-11-18 2025-02-18
2.6.x 2021-12-17 2022-11-24 2024-02-24
2.5.x 2021-05-20 已停止 2023-08-24
2.4.x 2020-11-12 已停止 2023-02-23
2.3.x 2020-05-15 已停止 已停止
2.2.x 2019-10-16 已停止 已停止
2.1.x 2018-10-10 已停止 已停止
2.0.x 2018-03-01 已停止 已停止
1.5.x 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 了。

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

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

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

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

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

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

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

Spring Boot3.0正式发布及新特性解读相关推荐

  1. Java 11 正式发布,新特性解读

    Java 11 正式发布,新特性解读 杨晓峰   2018 年 9 月 26 日 话题:Java语言 & 开发 不知不觉 JDK 11 已经发布了,从 9 开始,JDK 进入了让人学不动的更新 ...

  2. Java 11正式发布,新特性解读

    不知不觉 JDK 11 已经发布了,从 9 开始,JDK 进入了让人学不动的更新节奏,对于广大 Java 工程师来说,真是又爱又恨,Java 演进快速意味着它仍将能够保持企业核心技术平台的地位,我们对 ...

  3. React Native 0.59.x新特性解读

    概述 众所周知,在现在的前端技术开发栈中,跨平台开发是一个重要的课题,不管是老牌的Hybird还是最近流行的RN.Weex还是Flutter,不得不说,现在前端和客户端的界限越来越模糊. 最近在写&l ...

  4. Java 12正式发布,新特性解读!

    Java 12 如约而至,除了那些值得关注的特性,你也应该思考下 Java 的未来. 在 Java 9 之前,当一个版本被宣布为首选版本,存在一个"培育"(bedded-in)新 ...

  5. c语言 字符串 正序再倒序_新特性解读 | MySQL 8.0 索引特性3 -倒序索引

    原创作者:杨涛涛 我们今天来介绍下 MySQL 8.0 引入的新特性:倒序索引. MySQL长期以来对索引的建立只允许正向asc存储,就算建立了desc,也是忽略掉. 比如对于以下的查询,无法发挥索引 ...

  6. 中累计直方图_新特性解读 | MySQL 8.0 直方图

    原创作者:杨涛涛 MySQL 8.0 推出了histogram,也叫柱状图或者直方图.先来解释下什么叫直方图. 关于直方图 我们知道,在DB中,优化器负责将SQL转换为很多个不同的执行计划,完了从中选 ...

  7. 新特性解读 | MySQL 8.0 对 limit 的优化

    作者:杨奇龙 网名"北在南方",资深 DBA,主要负责数据库架构设计和运维平台开发工作,擅长数据库性能调优.故障诊断. 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不 ...

  8. JDK 16 昨日正式发布,新特性实践尝鲜来啦!

    JDK 16在2021年2月18日已完成最终候选版本,并于2021年3月16日正式发布.和JDK 15一样,JDK 16也会是一个短期版本,仅支持六个月.而计划在2021年9月发布的JDK 17将会是 ...

  9. php8网站,PHP8新特性解读(开发代码实例演示)

    " 本文主要内容为解读PHP8.0的主要新特性"PHP8新特性 前言 PHP8在2020年11月26日正式发布,又一个里程碑到来. 根据官网的信息目前已经发布到了8.0.2版本,但 ...

最新文章

  1. 第14期师资培训火热招生中,尽享国赛智能车一手资料
  2. rbac 一个用户对应多个账号_电商后台系统:管理后台之账号管理(一)
  3. wxWidgets:wxEventBlocker类用法
  4. 谷歌、雅虎支持中文域名搜索 有助提升SEO
  5. React-生命周期杂记 1
  6. Spring Cloud 5分钟搭建教程(附上一个分布式日志系统项目作为参考) - 推荐
  7. inux中限制用户进程CPU和内存占用率
  8. 求一列数据中的波峰_数据分析实践入门(四):数据运算
  9. Java程序员的日常 —— 响应式导航Demo
  10. hdu 1083 Courses
  11. 怎么把分开的pdf放在一起_PDF多页合并为一页的方法是什么 怎么将PDF文件拆分成单页...
  12. xp系统如何更改计算机用户名,windows xp电脑如何设置、修改开机密码
  13. 解决WPS及office二次开发接口无法注册的问题
  14. yolov3 python含新能源车牌识别系统有pyqt5界面
  15. 获取淘宝商品分类详情API,抓取淘宝全品类目API接口分享(代码展示、参数说明)
  16. 日有所思(7)——电拖疑问
  17. 老年人也能解决智能技术困难问题
  18. Hadoop完全分布式集群总结
  19. Pywinauto 中文文档
  20. 打工人,离职也要“躲躲藏藏”

热门文章

  1. 编程老手的哪些特点,是值得新手程序员学习的?
  2. php用ckeditor无法上传大图片,php ckeditor上传图片文件大小限制修改
  3. LOGO设计的五大原则
  4. Python爬取金山词霸每日一句,存储到MySQL中
  5. 2022年江西省建筑三类人员(企业主要负责人A证)练习题及答案
  6. WIN10电脑升级显卡驱动后变慢不少
  7. 《西游记》中师徒四人的形象探究及现实意义
  8. 内部系统自己搭建还是花钱购买?这是一个问题
  9. 适合小白的 Asyncio 教程!
  10. Luogu P3488 [POI2009]LYZ-Ice Skates