本文详细介绍如何从 Spring Boot 3.x 平滑迁移到 4.x。
要求:Java 21+
# SDKMAN sdk install java 21.0.1-tem sdk use java 21.0.1-tem # 验证 java -version
# 使用 OpenRewrite 自动分析 mvn org.openrewrite.maven:rewrite-maven-plugin:run \ -Drewrite.activeRecipes=io.github.patterns.springboot.UpgradeToSpringBoot4
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>4.0.0</version> </parent>
| 依赖 | 3.x | 4.x |
|---|---|---|
| Spring Framework | 6.x | 7.x |
| Hibernate | 6.x | 7.x |
| Tomcat | 10.x | 11.x |
| Jackson | 2.15+ | 2.17+ |
自动迁移:
# Eclipse 自动迁移 mvn jakarta:eclipse
手动修改:
// ❌ 旧版 import javax.servlet.*; import javax.persistence.*; // ✅ 新版 import jakarta.servlet.*; import jakarta.persistence.*;
# 3.x spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect # 4.x(自动检测,通常不需要配置)
启用方式:
spring.threads.virtual.enabled=true
代码适配:
// 传统 @Async @Async public CompletableFuture<String> asyncMethod() { } // 虚拟线程(更简单) public String virtualThreadMethod() { // 自动使用虚拟线程 return service.call(); }
// 使用 @Observed 注解 @Observed(name = "user.login") public User login(String username) { return userService.authenticate(username); }
@SpringBootTest class ApplicationTests { @Test void contextLoads() { // 验证上下文加载 } }
# 运行测试套件 mvn clean test # 构建原生镜像测试 mvn -Pnative native:compile
A: 确保所有依赖已升级到 Jakarta EE 10+ 版本。
A: 检查:
A:
如果迁移遇到问题,可以:
# 回滚到 3.x git revert <commit-hash> mvn clean package
迁移要点:
预计迁移时间:1-2 周中小型项目