NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Spring Boot Migrator 简介

  • 2022-10-11
    北京
  • 本文字数:1837 字

    阅读完需:约 6 分钟

Spring Boot Migrator简介

Spring Boot Migrator(SBM)是一个实验性的 Spring 项目,最初发布于 2022 年 3 月。SBM 允许开发人员将现有的、非Spring Boot应用(基于JAX-RS、EJB和JMS等技术)转换成Spring Boot应用,也可以将较旧的 Spring Boot 应用升级为最新版本。


SBM 是基于OpenRewrite实现的,这是一个用于源码和配置重构的通用工具。OpenRewrite 使用Recipes修改现有的 Kubernetes、Gradle、Maven、Java 等文件。例如,借助 recipes 能够将现有的应用升级为较新的 Java 版本。SBM 使用 OpenRewrite 实现 Spring Boot 的迁移。


下载最新版本的 SBM 之后,可以使用命令行界面(CLI)启动:

java -jar spring-boot-migrator.jar
复制代码

几秒钟之后,用户可以看到一个专门的 SBM 提示:migrator:>


list命令能够展示当前可用的 30 个 recipes。比如,其中的 recipes 能够升级 Spring Boot 到新版本、将 XML bean 配置变更为 Java 配置以及迁移各种 Java EE/Jakarta 到 Spring Boot。


scan [directory]命令能够分析一个应用并展示适用的 recipes。如下展示了一个样例,SBM 分析了一个比较旧的JAX-RS应用,该应用没有提供对 Spring Boot 的支持,结果如下所示:

scanning 'JAXRS'Checked preconditions for '.../JAXRS'[ok] Found pom.xml.[ok] 'sbm.gitSupportEnabled' is 'true', changes will be committed to branch [master] after each recipe.[ok] Required Java version (17) was found.[ok] Found required source dir 'src/main/java'.Maven       100% ││ 2/2 (0:00:09 / 0:00:00)Applicable recipes:    = 'automated recipe'  = 'partially automated recipe'    = 'manual recipe'  - initialize-spring-boot-migration []    -> Initialize an application as Spring Boot application.  - migrate-jax-rs []    -> Any class has import starting with javax.ws.rs  - cn-spring-cloud-config-server []    -> Externalize properties to Spring Cloud Config Server
复制代码

基于应用的源码,SBM 将会展示与条件相匹配的 recipes。如果没有匹配的 recipes 话,可用 recipes 的列表将保持为空。此时,我们可以使用其中列出的某个 recipes,比如,将现有的代码转换成 Spring Boot 应用:

migrator:> apply initialize-spring-boot-migration
复制代码

上述命令将会产生一个新的 Git 提交,描述为 SBM: applied recipe 'initialize-spring-boot-migration'。

我们分析一下该提交会发现在 pom.xml 中有如下变化:打包方式从 WAR 改变成了 JAR、增加了spring-boot-starterspring-boot-starter-test依赖和spring-boot-maven-plugindependencyManagement区域包含了 pom 类型的 spring-boot-dependencies。pom.xml 文件的缩进方式可能会与最初有所差异。


源码也会有所变更,现在包含了 SpringBootApp.java 和 SpringBootAppTest.java 类:

@SpringBootApplicationpublic class SpringBootApp {    public static void main(String[] args) {        SpringApplication.run(SpringBootApp.class, args);    }}
复制代码


@SpringBootTestclass SpringBootAppTest {    @Test    void contextLoads() {    }}
复制代码

现在,应用已经转换成了 Spring Boot 应用。下一步就是通过如下的命令将 JAX-RS 源码转换成 Spring Boot:

migrator:> apply migrate-jax-rs
复制代码

该命令会产生一个新的 Git 提交,其描述为:SBM: applied recipe 'migrate-jax-rs'. 分析该提交可以看出,JAX-RS 的导入被删除,取而代之的是导入了 Spring、类文件上的 JAX-RS @Path注解被 Spring Boot 的@RestController@RequestMapping取代。各个方法现在都有 Spring Boot 的@RequestMapping@RequestParam@PathVariable注解,以替换 JAX-RS 的注解,如@Get@Post@Path@Produces@QueryParam@PathParam。最后,这些方法的返回值不再是Response类型,而是ResponseEntity类型。


遗憾的是,迁移后运行该 Spring Boot 应用失败了,这是因为 pom.xml 文件中定义的maven-compiler-plugin使用了旧版本的 Java。手动修改 pom.xml 文件以使用当前安装的 Java 版本可以解决这个问题,也可以通过 OpenRewrite 的Change Maven插件配置来自动完成这个步骤。


分析产生的代码和配置,我们可能会发现一些 Spring Boot 不再需要的依赖。可以手动删除这些过时的依赖,也可以通过 SBM 或 OpenRewrite 自动完成这一步骤。


SBM 目前支持仅 Maven,因为 OpenRewrite 对 Gradle 的支持还没有完成。关于 SBM 的更多信息可以参阅其用户文档开发者文档


原文链接:

Introducing Spring Boot Migrator


相关阅读:

Spring Boot 2.7.0 发布,支持 GraphQL、Podman 和 Cache2k

2022-10-11 11:369459

评论

发布
暂无评论
发现更多内容

MySQL8新特性窗口函数详解

越长大越悲伤

MySQL sql

Nautilus Chain测试网迎阶段性里程碑,模块化区块链拉开新序幕

股市老人

Nautilus Chain测试网迎阶段性里程碑,模块化区块链拉开新序幕

EOSdreamer111

行业翘楚论道未来想象|2023开放原子全球开源峰会云原生分论坛圆满落幕

开放原子开源基金会

开源 云原生 开放原子

STM32L0 ADC使用HAL库关于校准问题的说明

矜辰所致

STM32L051 ADC 6 月 优质更文活动

基于STM32设计的智能灌溉控制系统

DS小龙哥

6 月 优质更文活动

中国科学院院士梅宏:推进构建面向全球的开源生态治理体系

开放原子开源基金会

开源 开放原子 梅宏

华为云数据库GaussDB:给世界一个更优选择

YG科技

深度学习应用篇-元学习[15]:基于度量的元学习:SNAIL、RN、PN、MN

汀丶人工智能

人工智能 深度学习 元学习 元强化学习 6 月 优质更文活动

TS接口类型

不叫猫先生

6 月 优质更文活动

DEVONthink Pro 3 for Mac:Mac强大的文档管理工具

背包客

macos 文档管理软件 Mac软件 DEVONthink Pro DEVONthink

华为云数据库GaussDB:数字化转型和可持续发展的更优选择

YG科技

聚焦企业实践一线与个体职业成长|2023开放原子全球开源峰会OSPO分论坛成功举办

开放原子开源基金会

开源 开放原子全球开源峰会 OSPO 开放原子

以商业实践反哺开源技术跃升|2023开放原子全球开源峰会开源商业化创新发展分论坛成功举行

开放原子开源基金会

开源 开源商业化 开放原子全球开源峰会

PDF Expert for mac:pdf编辑工具中文最新

背包客

macos PDF Mac软件 PDF Expert PDF Expert for Mac

VSD Viewer for Mac:Visio绘图文件阅读器

背包客

macos Mac软件 Visio文件查看工具 Visio Viewer for Mac VSD Viewer

2023开放原子全球开源峰会OpenCloudOS社区年会顺利举行

开放原子开源基金会

开源 开放原子 OpenCloudOS社区

Alibaba官方上线!SpringBoot+SpringCloud全彩指南

互联网架构师小马

Java 微服务 Spring Cloud Spring Boot

阿里资深专家撰写出的Nginx底层与源码分析手册,GitHub已爆赞

互联网架构师小马

nginx

【C/C++】extern 的一些注意事项

sidiot

c 6 月 优质更文活动

深入理解Pod的核心知识

穿过生命散发芬芳

pod 6 月 优质更文活动

对线面试官-Sychronized和ReentrantLock

派大星

Java 面试题

柏睿向量存储查询引擎基于LLM实现特定垂直领域的知识问答功能

新消费日报

激活SBOM内生价值 推动供应链体系建设健康有序|2023开放原子全球开源峰会软件物料清单(SBOM)分论坛成功举办

开放原子开源基金会

开源 开放原子全球开源峰会 开放原子 软件物料清单(SBOM)

这项国家级安全检测,腾讯云慧眼安全能力再获认可!

牵着蜗牛去散步

人工智能 腾讯云 网络安全 腾讯云AI 腾讯云慧眼人脸核身

华为云数据库GaussDB:数字化转型的可信之选

YG科技

深度学习应用篇-元学习[16]:基于模型的元学习-Learning to Learn优化策略、Meta-Learner LSTM

汀丶人工智能

人工智能 深度学习 元学习 元强化学习 6 月 优质更文活动

NestJs 管道(Pipe)

小鑫同学

typescript 后端 nestjs 6 月 优质更文活动

关于 SAP ABAP 字符变量和字符串变量字符个数的一个知识点,和一个血案

Jerry Wang

后台开发 abap Netweaver 字符串处理 6 月 优质更文活动

OneCode-流程引擎设计

codebee

WWDC2023 Session系列:探索XCode15新特性 | 京东云技术团队

京东科技开发者

xcode wwdc session WWDC 2023 企业号 6 月 PK 榜

Spring Boot Migrator简介_语言 & 开发_Johan Janssen_InfoQ精选文章