加速 Spring Boot 3.3 迁移

news2025/4/6 16:23:50

在这里插入图片描述

1. 关键要点

  • 为什么你应该升级你的服务
  • 迁移到 Spring Boot 3.3 时需要更新的内容
  • OpenRewrite 如何帮助使升级更轻松、更快捷

2. 前言

现在Spring Boot 已经到了3.3,但是你在哪里?在过去的 3.x 版本更新中,我们看到了许多新功能,包括使用新的 Java
语言功能的能力、增强的可观察性、更好地支持使用 Graal 进行本机编译以及对虚拟线程的支持。

然而,对于许多人来说,升级到最新版本似乎非常困难,尤其是从旧 2.x 版本升级而来的人。毕竟,除了 Spring 之外,还有很多东西需要更新,例如 Java 版本迁移到 Jakarta EE 9。而且您的组织中可能运行着各种依赖项的许多不同版本,这使得迁移任务更加困难。

继续阅读以了解如何使整个组织的软件迁移过程更加顺畅。

3. 为什么你应该升级你的服务

人们很容易采取“如果没有损坏,为什么要修复它”的想法。但是,OSS 对 Spring Boot 2.x 的支持已于 2023 年11 月结束。

这意味着您需要进行所有这些升级,以确保在发布新的 CVE 时您的软件保持安全。此外,通过升级,您将可以访问许多工具中的大量新功能。

例如,通过升级到 Java 17(这是 Spring Boot 3.0+ 的要求),您不仅可以获得各种新的 Java 语言功能(记录、模式匹配、switch 表达式等),还可以受益于虚拟机和垃圾收集器的性能改进。

‍注意:您的环境将具有独特的性能足迹。最好使用监控平台来创建应用程序当前性能的基准,这样您就可以在升级时量化节省的成本。

关于 Spring Boot 3.x,您可以从对构建本机可执行文件和使用 GraalVM 的更好支持中受益。通过将 Spring 应用程序构建为本机可执行文件,您会发现启动时间有显著改善。您还会发现可观察性是此新版本中的一个关键主题,现在通过Micrometer Tracing实现跟踪。

从Spring Boot 3.2开始,您可以利用 Java 21 及更高版本中的虚拟线程。通过卸载阻塞 IO 操作,您可以从同一硬件处理更多请求,而不会使编程模型复杂化。

4. 迁移到 Spring Boot 3.x 时需要更新的内容

迁移到 Spring Boot 3.x 包括许多相关的迁移和依赖项更新,您必须在迁移到此新 Spring Boot 版本之前执行这些更新,其中包括:

  • 升级您组织的应用程序、基础设施和 CI/CD 管道以使用 Java 17 或 21。此步骤的好消息是,这项工作可以在升级任何 SpringBoot 应用程序之前完成。
  • 任何利用 Java EE 的现有 Spring 应用程序都需要更新到 Jakarta EE 9。这似乎是一项简单的练习,涉及将所有导入从“javax”命名空间移动到“jakarta”命名空间,但这还要求将任何第三方库也迁移到与 Jakarta EE 9 兼容的版本。
  • 最后,根据应用程序从哪个 Spring Boot 版本迁移而来,迁移到 Spring Boot 3.x 时可能需要对应用程序的代码和配置进行一些更改

5. Java 17 迁移

Spring Boot/Spring 需要 Java 17 的基准版本,并且需要应用程序迁移到 Java 平台的最新长期支持 (LTS) 版本。

对于在 Java 8 上运行的应用程序,主要的摩擦来源是Java 9 中引入了模块系统,以及从核心 JDK 中删除了许多 J2EE javax 依赖项。使用任何 Java EE 规范的应用程序都需要向其项目添加显式依赖项。此外,还有许多与 Java 模块系统不兼容的第三方依赖项,必须作为此练习的一部分进行升级。

从 Java 11 开始,OpenJDK 社区采用了新的六个月发布周期,因此用户现在必须处理已弃用的 API。已弃用的功能最初不会造成严重影响,但随后会从 Java 平台中删除。跨 Java 多个版本升级的应用程序必须解决从平台中删除的 API。幸运的是,有一个 Java 工具Jdeprscan可用于识别哪些 API 已从平台弃用或删除。使用这些 API 的应用程序需要修复其解决方案才能成功升级到 Java 17。

6. Java 21 和虚拟线程

在这里插入图片描述
还有一个方便的Spring Boot 3.x 最佳实践配方,可让您升级到最新的 Spring Boot 3.x 版本,以及升级到 Java 21 和使用虚拟线程。今后,我们将保留此配方作为方便的配方,以便一次性应用所有推荐的 Spring Boot 配方。

作为升级到 Java 21 的一部分,我们还将采用新的 Sequenced Collections 接口中的方法,并放弃现已弃用的 Locales 和 URL 构造函数,以及其他一些较小的增强功能。有关完整详细信息,请参阅迁移到 Java 21 配方。

7. Jakarta EE 9 迁移

Spring Boot 3.x 更新之前需要处理的另一项重要任务是迁移到 J2EE 9。这很重要,因为所有 Java EE
库的命名空间都已从 javax 更改为 jakarta.*。作为其中的一部分,对这些库的任何引用都必须将其包迁移到新的命名空间。

此外,Jackson、Hibernate、Tomcat 和 Jetty 等第三方库提供了与 Jakarta EE 9 兼容的替代工件。这些新的工件将要求 Sprint Boot 的用户仔细检查他们的第三方库,以确保他们拥有兼容的工件。

8. OpenRewrite 自动重构如何提供帮助

好消息是,OpenRewrite 社区正在研究许多复杂更改的方案。这意味着这些更新的很大一部分可以使用OpenRewrite自动完成。

对于那些不知道的人来说,OpenRewrite 是一个语义感知的代码搜索和转换工具。它能够对代码、构建文件和配置进行复杂的更改,这些更改在惯用性上与现有项目的格式标准一致。

实际上,OpenRewrite 有大量的方案可以帮助用户迁移到 Spring Boot 3,其中包括:

  • 从旧版本的 Java 迁移到 Java 17
  • 从 Junit 4 迁移到 Junit 5
  • 从 Java EE 迁移到 Jakarta EE 8 和 9
  • 从旧版本的 Spring Boot 迁移(1.5 -> 2.x、2.7 ->3.0、3.0 -> 3.x)
  • 这些配方会改变编码、更新和配置!

配方是可组合的,这使得更大规模的框架迁移可以包含调用一组执行特定任务的配方或将其他复合配方链接在一起。

例如,迁移到 Java 11 的配方可以利用修改 Maven 依赖项的配方和针对特定已弃用 API 迁移的配方。反过来,迁移到 Java 17 的配方可以链接到 Java 11 配方,而Spring Boot 3.x 迁移配方可以利用这些配方以及将 Jakarta EE 库迁移到版本 9 的配方。

如果您想缩小所做更改的范围,还可以利用配方的可组合特性来定位您尚未更新的特定组件。例如,如果不使用 Spring Boot 3.x,您可以:

  • 将 Spring Boot 2.x 项目从 JUnit 4 迁移到 JUnit 5
  • 迁移到 Spring Security 5.8
  • 迁移到 Java 17
  • 执行 Spring Boot 2.x 最佳实践

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

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

相关文章

SAP EPPM-CPM(商业项目管理)模块功能演示:创建主项目

今天跟大家展示一下如何通过SAP CPM维护商业项目以及计划结构。 CPM的主要操作界面是SAP之前推出的新一代UX Fiori,如果需要在CPM操作,可分配SAP提供的标准复合角色:SAP_BPR_CPD_USER_1。 因为在CPM模块的宗旨是构建一个项目的全局视角门户…

触屏交互设备的安全风险

现实中的绝大多数电子设备都具有交互性,而现在越来越多的公共场合有布置越来越多的带触屏的交互设备,功能有简单的,有复杂的,布置的场所和应用的场合也各有不同,几乎在任何一个大型公共场合都可以看到这样的设备&#…

Android14音频进阶调试之命令播放mp3/aac非裸流音频(八十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更…

如何理解openfoam案例里面的blockMesh文件里面的simpleGrading

总结: simpleGrading参数分为xyz三个方向。如果你想使得网格在某个方向上更密集,可以在simpleGrading中将该方向的渐变率设置为小于 1 .更稀疏则设置大于1. 一、案例 比如我这个爆炸案例: 对应的blockMeshDIct文件如下: // 定…

第20周:Pytorch文本分类入门

目录 前言 一、前期准备 1.1 环境安装导入包 1.2 加载数据 1.3 构建词典 1.4 生成数据批次和迭代器 二、准备模型 2.1 定义模型 2.2 定义示例 2.3 定义训练函数与评估函数 三、训练模型 3.1 拆分数据集并运行模型 3.2 使用测试数据集评估模型 总结 前言 &#x1…

游戏盾是什么,如何保护网络游戏的安全

在数字化浪潮的推动下,网络游戏已成为人们休闲娱乐不可或缺的一部分。然而,随着游戏行业的蓬勃发展,网络安全问题也日益严峻,黑客攻击频发,给游戏玩家和游戏运营商带来了巨大困扰。为了应对这些挑战,应用加…

机器学习·L2W3-模型评估

模型评估 划分数据集为训练集、验证集、测试集 60%训练集、20%测试集和验证集 x_train,x_,y_train,y_train_test_split(X_train,y_train,test_size0.4) x_cv,x_test,y_cv,y_testtrain_test_split(x_train,y_train,test_size0.5)交叉验证-模型选择 使用交叉验证计算模型的损失…

新来的小姐姐,微软便笺程序打不开了

网管小贾 / sysadm.cc 公司新来了一位小姐姐,听说跟老板沾点关系。 这一天老板出差,午休时大家趁着小姐姐去取外卖,开始了各自的调侃。 部门主管丽姐开了个头,当着众人先抱怨上了。 “你们看看,你们看看,…

国内顶级 AI 的回答令人“贻笑大方”:看来苹果秃头码农们暂时还不会失业吧?

概览 在苹果 App 的日常开发中,利用 Xcode 预览可以帮我们极大的提高界面调试的效率。而且,若能进一步判断出当前 App 是否运行在 Preview 环境中则会更让秃头码农们“笑逐颜开”。 那么到底有没有简单的方法来完成这一任务呢?答案是肯定的…

苹果数据恢复攻略:3大秘籍,助你重建“数据高塔”

在数字时代,苹果设备如iPhone、iPad和Mac已成为我们生活中不可或缺的一部分,存储着大量珍贵的照片、视频、文件和联系信息。然而,意外的删除、系统更新或硬件故障等问题时常威胁着数据的安全。当数据“高塔”崩塌时,苹果数据恢复要…

海量数据处理商用短链接生成器平台 - 6

第十二章 海量数据下的分库分表技术栈讲解 第1集 大话业界常见数据库分库分表中间件介绍 简介: 大话业界常见分库分表中间件介绍 业界常见分库分表中间件 Cobar(已经被淘汰没使用了)TDDL 淘宝根据自己的业务特点开发了 TDDL (T…

基于JSP的智能仓储系统

你好,我是专注于智能系统开发的码农小野。如果对智能仓储系统感兴趣,欢迎私信交流。 开发语言 Java 数据库 MySQL 技术 JSP技术 工具 MyEclipse、Tomcat 系统展示 首页 [插入论文中的系统首页图片] 管理员功能界面 员工功能界面 供应商功能界…

MATLAB代码下载|蚁群算法|计算一元函数最小值

程序总述 程序使用蚁群优化的方法,计算一元函数(单输入单输出非线性函数)在定义域内的最小值。 函数形式 待计算最小值的函数形式如下: x 4 − 0.2 ∗ c o s ( 3 x ∗ π ) 0.6 x^4 - 0.2 * cos(3x * \pi) 0.6 x4−0.2∗cos…

AI新应用:概要设计与详细设计自动生成解决方案

近日,CoCode旗下的Co-Project智能项目管理平台V4.0.0升级发布,新增AI生成概要设计和AI生成详细设计功能,大大提高了设计的效率和质量。 CoCode旗下的Co-Project智能项目管理平台 一键智绘蓝图自现 平台设计板块新增概要设计功能,…

有点恶心,但是一周可以拿5个大模型岗offer,非常详细收藏我这一篇就够了

一、基础篇目前主流的开源模型体系有哪些? Transformer体系:由Google提出的Transformer模型及其变体,如BERT、GPT等。 PyTorch Lightning:一个基于PyTorch的轻量级深度学习框架,用于快速原型设计和实验。TensorFlow Mo…

同声传译翻译器哪个好?评测5款实用的同声传译翻译器

想象一下,在国际会议中,演讲者的声音刚落,耳机里便响起清晰的母语翻译;或是观看一部外语电影,无需眼睛离开屏幕,字幕就自动以你熟悉的语言呈现——这不再是科幻电影里的桥段,而是现实生活中同声…

猫头虎分享:CSDN博客最多可以创建多少个专栏?

🐯 猫头虎分享:CSDN博客最多可以创建多少个专栏? 摘要 📋 在CSDN博客平台上,不同级别的用户可以创建的专栏数量有所不同。本文将详细介绍CSDN博客创建专栏的具体数量限制,并且对不同等级用户所能创建的专…

武汉流星汇聚:亚马逊赋能中国卖家,全球市场份额优势引领出海潮流

在全球电商的浩瀚星空中,亚马逊无疑是最耀眼的星辰之一,其卓越的市场占有率不仅巩固了自身在全球电商市场的领导地位,更为中国卖家出海提供了前所未有的机遇与优势。随着中国卖家对海外市场的探索日益深入,亚马逊平台以其独特的优…

最新Thinphp开发的证书查询系统源码/开源版/支持自适应多端PC+手机站+含安装教程

源码简介: 最新Thinphp开发的证书查询系统源码,它是开源版,别小看这个开源版,它可是能自动适应各种屏幕大小,不管是用手机还是电脑,都能轻松查证书。附上了安装教程。 这款精心开发用PHP打造的证书查询系…

vue学习--02天

一、数据绑定 !DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><script src&q…