SuperAPI AI 工具集

spring-boot-4-migration

编程与开发

查看项目

更新于 11-02 11:12

技能介绍

本技能用于将 Spring Boot 3.x 应用迁移至 Spring Boot 4.0(对应 Spring Framework 7、Jackson 3、模块化 starter、JSpecify 等)。技能明确限定:仅用于显式的 Boot 3.x 到 4.x 迁移场景。

用途:提供一份按步骤执行的迁移工作流,并配套 references/ 下的主题参考文件,按当前步骤按需加载,避免一次性摄入全部信息。

主要能力与工作流:

  1. 检测当前状态:从 pom.xml、build.gradle(.kts) 或 gradle/libs.versions.toml 读取 Boot 版本;识别 Maven/Gradle 构建工具并使用项目 wrapper(./mvnw、./gradlew);检查 Java 版本(Boot 4 需 Java 17+,推荐 Java 25)、Kotlin 版本及 Jackson、Hibernate、Security、Kafka、Elasticsearch、MongoDB 等关键库。
  2. 先迁移到最新 3.5.x:若项目低于 3.5,先升级到最新 3.5.x、修复弃用警告并让测试通过,不允许从 3.2 直接跳到 4.0。
  3. 建立基线:运行完整构建与测试(./mvnw verify 或 ./gradlew build),记录迁移前已存在的失败。
  4. 升级到 4.0.x 并按顺序修复构建,每项后重新构建:starter 与移除的功能(经典 starter 或新模块化 starter,各技术有独立 *-test starter)→ 构建文件与第三方依赖 → Jackson 3(新 tools.jackson 包,存在临时 Jackson 2 兼容模块)→ 核心框架(JSpecify 可空性、包迁移、日志、DevTools、PropertyMapper)→ 配置属性(可临时加入 spring-boot-properties-migrator 查找改名键,之后移除)→ Web 与消息(尾斜杠匹配、HttpMessageConverters、Jersey、Kafka、RabbitMQ)→ 测试(Mockito/@MockBean 替换、@SpringBootTest 变更)→ Actuator 与可观测性模块、健康探针。
  5. 最终验证:完整构建、测试、启动、actuator 健康检查、主要端点冒烟测试,以及使用时的原生镜像构建。

使用方式:按工作流逐步执行,参考文件包括 01-prerequisites.md 至 11-checklist-pitfalls-resources.md,分别覆盖前提版本、starter 与移除功能、Jackson 3、核心框架、构建与依赖、配置属性、Web 与消息、测试、Actuator 与可观测性、Kotlin/Java 构建配置、检查清单与陷阱资源。构建工具方面,Maven 需改 parent 或 BOM 版本并替换 starter,使用 ./mvnw dependency:tree 查找残留的 Jackson 2、Undertow、Spring Retry;Gradle Kotlin DSL 更新插件版本或版本目录,用 ./gradlew dependencies --configuration runtimeClasspath 检查解析;Boot 版本应集中在一处维护。可选用 OpenRewrite(org.openrewrite.java.spring.boot4.UpgradeSpringBoot_4_0)并审阅 diff。

规则与限制:不得读取或打印 .env、凭据、properties 中的 token 等密钥;每步只改一处并在每步后运行测试套件,不能提交无法构建的改动;显式固定版本,禁止使用 latest 或开放区间;不确定时以 Spring Boot 4.0 迁移指南、发布说明及 Spring Framework 7、Security 7、Spring Data 2025.1、Spring Batch 6、Hibernate ORM 7、Jackson 3、Micrometer 等官方文档为准,冲突时优先官方来源。Boot 3.x 补丁升级或 4.0 到 4.1 升级应直接查阅对应版本文档,不属于 JDK 迁移。相关技能(spring-security、spring-observability、java-hibernate-jpa、java-upgrade、java-diagnostics、java-testcontainers、kotlin-springboot)仅在已安装时使用,否则按文中给出的回退方案处理。