跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Javajava

Spring Boot 3 升级至 4 完整迁移指南

Spring Boot 3 升级至 4 需先确认 JDK 版本(最低 17,推荐 21)并备份代码。主要步骤包括更新父工程版本、添加属性迁移工具检查废弃配置、适配第三方依赖及替换废弃 API(如 Jackson 3)。启用虚拟线程和声明式 HTTP 客户端可提升性能。测试阶段需验证编译启动及功能逻辑,处理依赖冲突与类找不到问题。最后可通过 GraalVM 原生镜像和分层 JAR 优化构建效率。

孤勇者发布于 2026/3/15更新于 2026/4/2611 浏览

升级前准备

升级前需做好充分准备,避免直接修改代码导致潜在问题。建议按步骤有序进行。

1. 检查当前环境

首先确认当前使用的版本;打开 pom.xml 或 build.gradle,查看 Spring Boot 版本号。如果是 3.x 系列,可以开始升级;如果是 2.x 或更老版本,建议先升级到 3.x,再考虑升级到 4。

<!-- 这是升级前的 pom.xml,确认版本是否为 3.x -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.0</version>
</parent>

2. JDK 版本要求

Spring Boot 4 要求最低 JDK 17,推荐使用 JDK 21。如果仍在使用 JDK 8 或 JDK 11,需要先升级 JDK。

# 检查 JDK 版本
java -version
# 如果版本低于 17,需先升级 JDK
# 推荐 JDK 21,性能更好且支持虚拟线程

3. 备份代码

升级前务必备份代码,以便出现问题时回滚。使用 Git 时,可先提交当前代码或创建新分支专门用于升级。

# 创建升级分支
git checkout -b upgrade-to-spring-boot-4
# 提交当前代码
git add .
git commit -m "准备升级到 Spring Boot 4"

依赖升级

1. 更新 Spring Boot 版本

将 Spring Boot 版本改为 4.0.0。Maven 和 Gradle 配置方式不同,分别说明如下。

Maven 配置:

<!-- 升级后的 pom.xml,版本改为 4.0.0 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</>
    4.0.0


    21

artifactId
<version>
</version>
</parent>
<properties>
<java.version>
</java.version>
</properties>

Gradle 配置:

plugins {
    id 'org.springframework.boot' version '4.0.0'
    id 'io.spring.dependency-management' version '1.1.4'
}
java {
    sourceCompatibility = '21'
    targetCompatibility = '21'
}

2. 添加属性迁移工具

部分配置属性可能被废弃或改名。Spring Boot 提供了 spring-boot-properties-migrator 工具,可在启动时自动检查并提示废弃属性。

<!-- Maven 配置 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-properties-migrator</artifactId>
    <scope>runtime</scope>
</dependency>
// Gradle 配置
dependencies {
    runtimeOnly 'org.springframework.boot:spring-boot-properties-migrator'
}

启动应用后,该工具会在日志中提示废弃属性。升级完成后,记得移除该依赖。

3. 检查第三方依赖兼容性

Spring Boot 4 升级了 Spring Framework 至 7.0,部分第三方依赖可能尚未适配。需逐一检查是否有兼容版本。

<!-- 数据库相关 -->
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
</dependency>
<!-- Redis 相关 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 消息队列 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

建议访问各依赖官网确认是否发布兼容 Spring Boot 4 的版本。

代码修改

1. 废弃的 API 替换

Spring Boot 4 全面支持 Jackson 3,Jackson 2 的自动配置被标记为废弃。

// 升级前:使用 Jackson 2
@Configuration
public class JacksonConfig {
    @Bean
    public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {
        return new Jackson2ObjectMapperBuilder();
    }
}

// 升级后:改用 Jackson 3
@Configuration
public class JacksonConfig {
    @Bean
    public JacksonObjectMapperBuilder jacksonObjectMapperBuilder() {
        return new JacksonObjectMapperBuilder();
    }
}

2. 配置属性迁移

部分配置属性已改名或被废弃。启动时 spring-boot-properties-migrator 会提示具体变化。

# 升级前配置
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

根据日志提示调整属性名或删除不需要的配置。

3. 虚拟线程配置

Spring Boot 4 深度集成虚拟线程。若使用 JDK 21,可启用以提升并发性能。

# application.yml 配置
spring:
  threads:
    virtual:
      enabled: true
// 代码中使用虚拟线程执行器
@Configuration
public class VirtualThreadConfig {
    @Bean
    public Executor virtualThreadExecutor() {
        return Executors.newVirtualThreadPerTaskExecutor();
    }

    @Bean
    public TomcatProtocolHandlerCustomizer<?> protocolHandlerVirtualThreadExecutorCustomizer() {
        return protocolHandler -> {
            protocolHandler.setExecutor(Executors.newVirtualThreadPerTaskExecutor());
        };
    }
}

4. 声明式 HTTP 客户端

Spring Framework 7.0 引入声明式 HTTP 客户端,替代 RestTemplate 和 WebClient。

// 升级前:使用 RestTemplate
@Service
public class UserService {
    @Autowired
    private RestTemplate restTemplate;

    public User getUser(Long id) {
        return restTemplate.getForObject("http://api.example.com/users/" + id, User.class);
    }
}

// 升级后:改用声明式 HTTP 客户端
@HttpExchange(url = "http://api.example.com")
public interface UserClient {
    @GetExchange("/users/{id}")
    User getUser(@PathVariable Long id);
}

@Service
public class UserService {
    @Autowired
    private UserClient userClient;

    public User getUser(Long id) {
        return userClient.getUser(id);
    }
}

测试和验证

1. 编译检查

升级后先进行编译,解决出现的错误。

# Maven 编译
mvn clean compile
# Gradle 编译
./gradlew clean build

2. 启动应用

启动应用并观察日志,确认无异常及属性警告。

# 启动应用
mvn spring-boot:run
# 或 java -jar target/your-app.jar

3. 功能测试

运行功能测试,重点验证修改过的代码逻辑。

@SpringBootTest
class ApplicationTest {
    @Test
    void contextLoads() {
        // 验证上下文加载
    }

    @Test
    void testUserService() {
        // 验证业务功能
    }
}

常见问题处理

1. 依赖冲突

使用构建工具检查依赖树,排除冲突依赖或升级版本。

# Maven 检查依赖树
mvn dependency:tree
# Gradle 检查依赖
./gradlew dependencies
<!-- Maven 排除冲突依赖 -->
<dependency>
    <groupId>com.example</groupId>
    <artifactId>some-library</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

2. 配置属性找不到

若日志提示属性被废弃,按提示修改为新属性名或删除。

3. 类找不到

若报 ClassNotFoundException,检查依赖版本是否兼容 Spring Boot 4。

升级后的优化

1. 启用虚拟线程

JDK 21 环境下建议启用虚拟线程以大幅提升并发性能。

spring:
  threads:
    virtual:
      enabled: true

2. 使用 GraalVM 原生镜像

Spring Boot 4 对 GraalVM 支持更完善,可尝试编译原生镜像以加快启动速度并减少内存占用。

# Maven 构建镜像
mvn spring-boot:build-image
# Gradle 构建镜像
./gradlew bootBuildImage

3. 使用分层 JAR

启用分层 JAR 可将依赖层、资源层和业务层分开,优化 Docker 镜像构建效率。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <layers>
            <enabled>true</enabled>
        </layers>
    </configuration>
</plugin>

总结

从 Spring Boot 3 升级到 4 的主要步骤包括:

  1. 检查环境:确认 JDK 版本及当前 Spring Boot 版本。
  2. 备份代码:使用 Git 创建分支或备份文件。
  3. 升级依赖:更新 Spring Boot 版本,检查第三方依赖兼容性。
  4. 修改代码:替换废弃 API,迁移配置属性。
  5. 测试验证:完成编译、启动及功能测试。
  6. 优化配置:启用虚拟线程,使用原生镜像等特性。

升级过程需耐心细致,遇到问题查阅文档或日志提示。升级完成后,虚拟线程和原生镜像等特性将带来明显的性能提升。

目录

  1. 升级前准备
  2. 1. 检查当前环境
  3. 2. JDK 版本要求
  4. 检查 JDK 版本
  5. 如果版本低于 17,需先升级 JDK
  6. 推荐 JDK 21,性能更好且支持虚拟线程
  7. 3. 备份代码
  8. 创建升级分支
  9. 提交当前代码
  10. 依赖升级
  11. 1. 更新 Spring Boot 版本
  12. 2. 添加属性迁移工具
  13. 3. 检查第三方依赖兼容性
  14. 代码修改
  15. 1. 废弃的 API 替换
  16. 2. 配置属性迁移
  17. 升级前配置
  18. 3. 虚拟线程配置
  19. application.yml 配置
  20. 4. 声明式 HTTP 客户端
  21. 测试和验证
  22. 1. 编译检查
  23. Maven 编译
  24. Gradle 编译
  25. 2. 启动应用
  26. 启动应用
  27. 或 java -jar target/your-app.jar
  28. 3. 功能测试
  29. 常见问题处理
  30. 1. 依赖冲突
  31. Maven 检查依赖树
  32. Gradle 检查依赖
  33. 2. 配置属性找不到
  34. 3. 类找不到
  35. 升级后的优化
  36. 1. 启用虚拟线程
  37. 2. 使用 GraalVM 原生镜像
  38. Maven 构建镜像
  39. Gradle 构建镜像
  40. 3. 使用分层 JAR
  41. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • AI 产品经理转型指南:核心能力与行业认知
  • OpenClaw 对接 Stable Diffusion:免费 AI 绘画方案
  • OpenClaw 搭建有记忆与性格的私人 AI 助手配置指南
  • FPGA 实现 MIPI 协议全解析与完整时序规范
  • HarmonyOS 6.0 PC 端高性能图像展示器开发:ArkUI 适配与跨设备流转
  • 贝佐斯比尔盖茨等巨头押注 NASA 工程师打造通用机器人大脑 估值 20 亿美元
  • 在 Windows 上安装和编译 llama.cpp
  • 6 款主流国产大模型功能对比与使用指南
  • 大模型算法工程师核心面试题及参考答案
  • Acconeer A121 60GHz 毫米波雷达传感器开发说明
  • C++ 哈希表使用与底层实现原理
  • OpenClaw Mac 安装指南
  • 基于 Trae AI 与 html.to.design 的 Figma 原型快速转换工作流
  • Linux 信号机制:信号的产生、类型与捕获
  • 为什么知识图谱+RAG 方案优于传统 RAG
  • C# 技术栈下 WebAPI 数据协议实战:RESTful 与 GraphQL 对比
  • Stack-Chan 机器人开发指南
  • 2025 华为 OD 机试真题题库与 OJ 刷题指南
  • AI 进化论:从 Function Calling 到 MCP
  • Webnovel Writer:基于 Claude Code 的长篇网文 AI 创作系统

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online