Spring Boot3.0正式发布及新特性解读

news2024/11/20 12:30:49

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.x2022-11-242023-11-242025-02-24
2.7.x2022-05-192023-11-182025-02-18
2.6.x2021-12-172022-11-242024-02-24
2.5.x2021-05-20已停止2023-08-24
2.4.x2020-11-12已停止2023-02-23
2.3.x2020-05-15已停止已停止
2.2.x2019-10-16已停止已停止
2.1.x2018-10-10已停止已停止
2.0.x2018-03-01已停止已停止
1.5.x2017-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新特性解读

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/106455.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Live800:在线客服系统排名是怎么样的?

在线客服系统排名是怎么样的?在线客服系统提供商提供哪些服务?在线客服系统评测要点?这些都是企业很关心的问题,这里进行简要的解答。 在线客服系统排名是怎么样的? 客观来说在线客服系统没有统一的行业标准,因此也没有统一的排名。各在线客服系统厂商各有特色,行业竞争激…

【大数据】python连接并使用redis

文章目录redis安装redis连接python安装redis库conda下载及配置vs连接redisredis使用stringset设置getrange截取append追加内容strlen(key) 字节长度listlpush,rpush赋值lpushx,rpushx只给存在的键值赋值llen 列表个数linsert 在某一个值前或者后插入新值lset 对某一个索引位置赋…

Hive 源码解读 准备篇 Debug 讲解

使用 Hive 执行 HQL 查询时遇到 bug,解决办法无非几种,explain HQL、查看日志、远程 Debug,本文就将详细讲解如何使用 Idea 远程 Debug。 1. Debug 环境准备 下载 Hive 源码包,自行编译一下,建议在 Linux 环境下编译,然后将整个编译好的包全部拷贝到 IDEA 工作目录中并…

软考高级-系统架构设计师-知识点总结(一)架构设计基础

第一部分&#xff0c;架构设计基础。由系统架构设计师概述、计算机与网络基础知识、信息系统基础知识、系统开发基础知识四部分构成。 目录 系统架构设计师概述 系统架构的概念和历史 系统架构设计师的定义 系统架构师具备的能力 计算机与网络基础知识 操作系统基础 操作…

加法扩散模型全部过程推导和实现代码

🍿*★,*:.☆欢迎您/$:*.★* 🍿 add_diff 使用之前的扩散方法(get_image_by_t_cv)总结出来的 get_noise 和 get_x 通过 add_diff 可以得到 通过get_x 带入 两组参数 可以推导出 get_xt_1 使用add_diff(这里要反着用 参考show_add_diff_r) 输入 x noise t t max 可以得到x…

DockeFile的介绍与使用

目录 1. Dockfile是什么 2. Dockerfile的基本组成 2.1 FROM 2.2 MAINTAINER 2.3 RUN 2.4 COPY 2.5 ADD 2.6 EXPOSE 2.7 WORKDIR 2.8 ONBUILD 2.9 USER 2.10 VOLUME 2.11 CMD 2.12 ENTRYPOINT 3. dockerfile示例 3.1 准备 3.2 将该目录上传至linux 3.3 构建镜…

Docker+Jenkins+Gitee+Maven项目配置jdk、maven、gitee等拉取代码并自动构建以及遇到的那些坑

场景 CentOS中使用Docker安装Jenkins&#xff1a; CentOS中使用Docker安装Jenkins_霸道流氓气质的博客-CSDN博客_centos docker jenkins 在上面使用Docker部署起来Jenkins的基础上&#xff0c;怎样拉取SpringBoot项目代码并编译构建。 后台项目的搭建参考如下。 若依前后端…

OpenFeign AutoConfiguration源码解析

本文约2千字&#xff0c;主要知识 OpenFeign的父子容器FeignClient的注册 背景 在使用Spring Cloud时&#xff0c;经常使用OpenFeign 作为远程服务调用的类库&#xff1b;Feign 是一种声明式服务调用组件&#xff0c;它在 RestTemplate 的基础上做了进一步的封装。通过 Feig…

跨平台应用开发进阶(五十)uni-app ios web-view嵌套H5项目白屏问题分析及解决

文章目录一、前言二、问题分析三、解决方案3.1 nvue 页面替代 vue 页面3.2 白屏检测刷新3.2.1 自动刷新3.2.2 手动刷新3.3 总结四、拓展阅读一、前言 应用uni-app框架开发好APP上架使用过程中&#xff0c;发现应用经过长时间由后台切换至前台时&#xff0c;通过webview方式嵌套…

SQL语句(基本)

SELECT 语句的 执行过程&#xff1a; from clause ---> where clause ---> select --->group by ---> having--->order by ---> limit 写法顺序: select col1,... from clause ---> where clause ---> group by ---> having---> order by --->…

“ 请你要发光 而不是被照亮 “

做一个厉害的大人 勇敢地长大 成为会发光的星星 勇音频&#xff1a;00:0003:41 | 01 | 世界不会辜负努力拼搏的人 光明的前途在乌云散去之后 请你一定一定坚持自己 勿忘初心 要做会发光的星星 成为想成为的大人啊 | 02 | 我牵起你的手 你望向我的眼 少了你的懵懂青涩…

总线一:IIC

一、I2C集成电路总线, 多用于主控制器和从器件间的主从通信。 二、适用场景&#xff1a;在小数据量场合使用&#xff0c;传输距离短。 三、IIC是半双工。IIC的物理层&#xff1a;两条总线线路&#xff0c;一条是串行数据线SDA&#xff0c;一条是串行时钟线SCL&#xff0c;当总…

《Python知识手册》更新到V4.1版,快拿走学习

前言 最近&#xff0c;我花了点时间&#xff0c;把《Python知识手册》的部分内容进行了更新&#xff0c;更新后的版本号为 v4.1 版。 python知识手册内容&#xff1a;《Python知识手册》 没有比较完整的覆盖 Python 的基础知识。因此&#xff0c;针对手册的阅读&#xff0c;各…

程序员年底好找工作吗?

到年底了除非必要不要辞职&#xff01;除非必要不要辞职&#xff01;除非必要不要辞职&#xff01; 重要的事情说三遍。 很多老哥问我&#xff1a;工作干不下去了&#xff0c;这会儿辞职找工作合适吗&#xff1f;今天就来为大家解答一下&#xff0c;为什么不要在年底辞职&…

Redis6入门到实战------ 六、Redis_Jedis_测试

1 Jedis所需要的jar包 在pom文件中引入依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version> </dependency>2 连接Redis注意事项 禁用Linux的防火墙&#xff1a;L…

Linux mybash

shell 在了解bash之前 我们要先了解shell Shell 是一个用 C 语言编写的程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言。 Shell 是指一种应用程序&#xff0c;这个应用程序提供了一个界面&#xff0c;用户通过这个界面…

NoSQL数据库原理与应用综合项目——Neo4j篇

NoSQL数据库原理与应用综合项目——Neo4j篇 文章目录NoSQL数据库原理与应用综合项目——Neo4j篇0、 写在前面1、本地数据或HDFS数据导入到Neo4j2、Neo4j数据库表操作2.1 使用Python连接Neo4j2.2 查询数据2.3 插入数据2.4 修改数据2.5 删除数据3、Windows远程连接Neo4j(Linux)4、…

uboot源码下载以及编译

环境&#xff1a;ubuntu 20.04 uboot源码下载以及编译1 uboot源码下载&#xff1a;1.1 进入uboot官网1.2 下载源码2 编译uboot2.1 配置2.2 编译2.2.1 确认编译工具链是否ok2.2.2 配置环境变量2.2.3 编译3 注意事项3.1 uboot 2022.04版本问题3.2 unable to execute swig: No suc…

分代收集算法

将这个堆内存划分成两块&#xff1a;新生代和老年代&#xff0c;刚刚创建的对象都在新生代&#xff0c;长久存活的对象都在老年代&#xff08;老年代的垃圾回收很久发生一次&#xff0c;新生代的垃圾回收发生的比较频繁&#xff09; 新生代又进一步划分成伊甸园Eden&#xff0…

docker安装gitlab(超级详细)

前提&#xff1a; 在操作之前需要安装docker和docker-compose 拉取镜像 docker pull gitlab/gitlab-ce:15.2.4-ce.0 创建本地文件夹 mkdir /data/docker/gitlab/etc mkdir /data/docker/gitlab/logs mkdir /data/docker/gitlab/data 编写 docker-compose.yml cd /data/docker/…