spring boot2升级spring boot3的整体步骤流程

 更新时间:2025年08月19日 09:37:21   作者:兮动人  
从Spring Boot2到Spring Boot3的升级是一次全面而深刻的变革,它不仅带来了技术栈的更新和新特性的引入,还显著提升了应用的性能和开发效率,这篇文章主要给大家介绍了关于spring boot2升级spring boot3的整体步骤,需要的朋友可以参考下

spring boot2升级boot3

  • 整体流程如下

1、借助于开源的自动化代码重构工具OpenRewrite,快速地进行代码重构等

2、相关坐标升级更改

3、配置文件属性更改

4、打包、构建与运行验证

1. 前期准备工作

  • 第一步:确保升级之前项目是可编译运行的

  • 第二步:更改项目坐标中 version 版本,以免 install 后覆盖了已有的包,如:

<revision>5.9.0-SNAPSHOT</revision>
更改后:
<revision>5.9.0.1-boot3-SNAPSHOT</revision>

2. 使用OpenRewrite升级SpringBoot项目

对原项目代码进行重构,快捷升级可以使用OpenRewrite插件对项目进行改写,能自动升级如下:

* javax 写法自动转为 jakarta
* 部分旧包pom坐标自动更新为新版pom坐标
* 部分配置旧版自动更新新版本
* 自动增加新版自动装配文件
* 部分spring写法变更会自动更换(部分复杂的会有一定的问题,需要对部分代码进行手动重写)

需注意的几个问题:

  • 部分自动更新的写法可能会有问题,上面说的复杂的写法

  • 部分设置的版本控制不会改变,但是如果spring定义了更高的版本,可能会导致版本过老不兼容,建议将spring-boot-dependecies里面定义过的版本控制进行删除

  • 自动生成后仍需手动编译进行查缺补漏

相关流程

1、原项目可编译运行的情况下
2、引入OpenRewrite插件依赖相关执行后
3、升级jdk、Maven、boot相关版本

2.1 添加OpenRewrite相关依赖

重要

使用插件前要保证原项目没有经过更改,以及改过相关依赖坐标等。保证原本可编译过。

需要注意的点是该插件会对文件夹内所有文件都进行重构,不是根据具体的pom配置的module限制。所以会需要占用很大的内存,如果未设置jvm大小,一般在比较多模块的情况下会OOM。此时需要用命令设置,在项目根目录设置即可:

set MAVEN_OPTS=-Xmx2048m -XX:MaxHeapSize=1024m
  • 目前最新的插件只支持SpringBoot_3_3,没有3.4.x的,但是相差不大,使用后注意如有springboot版本定义改为和框架同步 3.4.3
  • 在 pom.xml 中添加 OpenRewrite 插件和所需的 recipe
<plugin>
    <groupId>org.openrewrite.maven</groupId>
    <artifactId>rewrite-maven-plugin</artifactId>
    <version>6.2.2</version>
    <configuration>
        <!-- activeRecipes标签用于指定要执行的OpenRewrite recipes -->
        <activeRecipes>
            <!-- 用于将SpringBoot升级到3.0版本的recipe -->
         <recipe>org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_3</recipe>
        </activeRecipes>
    </configuration>
    <dependencies>
        <dependency>
            <!-- 专门针对 Spring 生态系统的重构规则集合 -->
            <!-- 1、Spring Boot 2.x → 3.0 迁移
 			    2、Jakarta EE 包名替换(javax → jakarta)
			    3、过时配置属性更新 -->
            <groupId>org.openrewrite.recipe</groupId>
            <artifactId>rewrite-spring</artifactId>
            <version>6.2.1</version>
        </dependency>
    </dependencies>
</plugin>

2.2 运行OpenRewrit后检查变更

1、引入坐标后使用如下命令进行预览更改,不修改实际源代码

mvn rewrite:dryRun

2、执行变更,实际应用并修改源代码

mvn rewrite:run
  • 这个命令会分析你的项目,并应用SpringBoot 3.x.x 升级 recipe,自动更新代码以适应新版本的API变化

  • 运行后检查:使用git查看文件变化,变化过大的需要格外注意些,如需要需进行手动更改

3、举例

例1

  • 运行 mvn rewrite:dryRun

  • 运行 mvn rewrite:run

  1. 生成了新的 auto-configuration imports 文件
Generated new file:
xxx/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

Spring Boot 3.x 之后的变更之一,新的自动配置机制要求把 AutoConfiguration 类明确定义在 imports 文件中,取代了 spring.factories 文件中的配置方式

  1. 修改了配置类
Changes have been made to:xxx/src/main/java/com/xxx/config/XxxConfigLoaderAutoConfiguration.java

例2 :如运行 mvn rewrite:run,会把包名以 javax开头的需要相应地变更为jakarta,对应的单元测试、坐标等也会相应的进行变更

2.3 升级相关依赖版本

  • boot2
<java.version>1.8</java.version>
<spring-framework.version>5.3.27</spring-framework.version>
<spring-boot.version>2.5.8</spring-boot.version>
<spring-cloud.version>2020.0.5</spring-cloud.version>
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
  • boot3
<java.version>17</java.version>
<spring-framework.version>6.2.3</spring-framework.version>
<spring-boot.version>3.4.3</spring-boot.version>
<spring-cloud.version>2024.0.0</spring-cloud.version>
<spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version>
  • 更新 Maven 编译器的配置
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
  • 需要使用 Maven 3.6.3 以上版本,对应的插件版本升级如下
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-plugin-plugin</artifactId>
    <version>3.8.1</version>
</plugin>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.1.2</version>
</plugin>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.6.2</version>
    <configuration>
        <compilerArgs>
            <!-- 保留方法参数名,供 Spring/SpringDoc 等框架反射使用,
			不加的话endpoin会出问题-->
            <arg>-parameters</arg>
        </compilerArgs>
        <encoding>${project.build.sourceEncoding}</encoding>
        <showWarnings>true</showWarnings>
        <release>${java.version}</release>
    </configuration>
</plugin>

2.4 测试

  • mvn compile 修改编译问题

  • 运行对应的测试类,确保升级后的项目仍能正常运行。可能需要手动调整一些OpenRewrite无法自动处理的部分

3. 常用坐标更改

1、MySQL JDBC驱动

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
变更为:
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
</dependency>

2、坐标不变,指定对应的版本号,如:

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.12.0</version>
</dependency>

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-inline</artifactId>
    <version>4.8.0</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-jcl</artifactId>
    <scope>provided</scope>
    <version>1.7.25</version>
</dependency>

<dependency>
    <groupId>org.apache.httpcomponents.client5</groupId>
    <artifactId>httpclient5</artifactId>
    <version>5.4.1</version>
</dependency>

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.2</version>
</dependency>

3、测试相关

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.11.4</version>
</dependency>
<dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <version>5.11.4</version>
</dependency>

4. 配置文件属性更改

1、Redis 配置

spring.redis.host: localhost
spring.redis.port: 6379
变更为:
spring.data.redis.host: localhost
spring.data.redis.port: 6379

2、RabbitMQ 配置

spring.rabbitmq.addresses: localhost:5672
spring.rabbitmq.username: guest
spring.rabbitmq.password: guest
变更为:
spring.rabbitmq.host: localhost
spring.rabbitmq.port: 5672
spring.rabbitmq.username: guest
spring.rabbitmq.password: guest

5. 常见问题汇总

1、通过 OpenRewrite 插件自动更改代码后,会出现 @Configuration 和 @AutoConfiguration 同时存在的情况,需要手动删除 @Configuration

2、通过插件自动更改后会出现pom某些包自动指定了某些版本,建议删除使用框架控制的版本

3、部分引入了 org.apache.commons.lang.x 的包会自动变成 org.apache.commons.lang3.x,需要手动改回。或者引入对应的坐标

4、部分注解会修改错误,如 javax.annotation.Nullable 会修改成 jakarta.annotation.Nullable,其实不存在 jakarta.annotation.Nullable,需要修改回去

5、部分app启动时会报xxx未开放,需要在启动增加如下参数

--add-opens java.base/java.lang.reflect=ALL-UNNAMED

总结

到此这篇关于spring boot2升级spring boot3的文章就介绍到这了,更多相关spring boot2升级boot3,spring boot 升级,springboot升级内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JVM类加载机制与双亲委派使用及说明

    JVM类加载机制与双亲委派使用及说明

    文章介绍了JVM的四大类加载器(启动类加载器、扩展类加载器、应用程序类加载器和自定义类加载器),双亲委派机制及其核心优势,以及如何打破双亲委派机制的场景和实现方式
    2026-02-02
  • SpringBoot实现图形验证码的示例代码

    SpringBoot实现图形验证码的示例代码

    验证码的实现方式有很多,可以由前端实现,也可以由后端进行实现,也有很多的插件和工具包可以使用,在这里,我们使用 Hutool 提供的小工具实现,本文介绍SpringBoot实现图形验证码的实例,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • Java后端头像合成到背景图上面代码实践

    Java后端头像合成到背景图上面代码实践

    这篇文章介绍了如何使用Java后端工具类将头像合成到背景图上,提供了两种合成方法:一种是将头像固定在背景图的某个位置,另一种是将头像合成到背景图的中心位置,作者分享了图片合成类的代码,并总结了如何根据需要调用相关方法返回图片地址
    2026-01-01
  • spring boot 1.5.4 集成shiro+cas,实现单点登录和权限控制

    spring boot 1.5.4 集成shiro+cas,实现单点登录和权限控制

    这篇文章主要介绍了spring boot 1.5.4 集成shiro+cas,实现单点登录和权限控制,需要的朋友可以参考下
    2017-06-06
  • IntelliJ IDEA查看项目git路径的三种方式

    IntelliJ IDEA查看项目git路径的三种方式

    这篇文章主要介绍了IntelliJ IDEA查看项目git路径的三种方式,文中通过图文结合的方式讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-12-12
  • Spring Boot Debug调试过程图解

    Spring Boot Debug调试过程图解

    这篇文章主要介绍了Spring Boot Debug调试过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • JAVA使用JDBC技术操作SqlServer数据库实例代码

    JAVA使用JDBC技术操作SqlServer数据库实例代码

    本篇文章主要介绍了JAVA使用JDBC技术操作SqlServer数据库实例代码,具有一定的参考价值,有兴趣的可以了解一下。
    2017-01-01
  • Java11 发布前抓紧掌握这些新特性

    Java11 发布前抓紧掌握这些新特性

    Java 11即将发布,你准备好了? 在这篇文章中,我们讨论下在进入Java 11之前,你需要了解的Java 8、9和10的一些有用功能,若还在用Java 8以前的版本,那就太落伍了,这里首先要明确,Java 8:是一个针对传统传统版本的重大转变
    2018-09-09
  • 详解Java String类常用方法有哪些

    详解Java String类常用方法有哪些

    今天给大家带来的是关于Java String的相关知识,文章围绕着String类常用方法展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • java 根据身份证号码判断出生日期、性别、年龄的示例

    java 根据身份证号码判断出生日期、性别、年龄的示例

    这篇文章主要介绍了java 根据身份证号码判断出生日期、性别、年龄的示例,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-10-10

最新评论