🚨 Spring Boot 3.x 4.0 迁移:到底出了什么问题(以及我们是如何修复的)

发布: (2026年1月31日 GMT+8 06:48)
4 min read
原文: Dev.to

Source: Dev.to

Jakarta 命名空间问题

症状

即使在 Spring Boot 3.x 中已迁移到 Jakarta,仍有一些传递性依赖会拉入 javax.* 类。常见的罪魁祸首包括:

  • 旧的验证库
  • SOAP / JAXB 工具
  • 传统的 servlet 过滤器

解决方案

mvn dependency:tree | grep javax

然后:

  • 强制使用兼容 Jakarta 的版本。
  • 明确排除旧的传递性依赖。

经验教训: “在 3.x 能用” 并不意味着在 4.0 中安全。

Spring Security 配置变更

症状

Spring Boot 4 时代的 Spring Security 要求完全显式的配置。出现问题的地方:

  • 已废弃的 DSL 被移除。
  • 默认值改变(尤其是 CSRF 与会话处理)。
  • 自定义过滤器不再自动注册。

解决方案

改用显式的 SecurityFilterChain Bean,停止依赖默认配置。

@Bean
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http
        .csrf(csrf -> csrf.disable())
        .authorizeHttpRequests(auth -> auth.anyRequest().authenticated());
    return http.build();
}

经验教训: 隐式的安全配置已经消失;要么显式配置,要么会被惊到。

Starter 重命名、拆分与移除

症状

多个 Spring Boot starter 被重命名、拆分或直接移除,尤其是以下领域:

  • 可观测性
  • Actuator 扩展
  • 传统集成

解决方案

手动审计你的 starter 列表;不要盲目信任旧的清单。

mvn dependency:tree | grep spring-boot-starter

将被移除的 starter 替换为:

  • 显式的库,或
  • 新的模块化替代品。

Java 基线不匹配(Java 21+)

症状

Spring Boot 4.0 更加推动现代 Java(Java 21+)。出现问题的地方:

  • Testcontainers 镜像
  • ByteBuddy / Mockito 兼容性
  • JVM 参数被移除或被忽略

解决方案

  • 对齐本地 Java 版本、CI Java 版本以及 Maven toolchains。
  • 积极升级测试库。

经验教训: 当出现 Spring 错误时,先检查是否是 JVM 版本不匹配。

可观测性默认值重构

症状

Spring Boot 4 重构了可观测性默认值:

  • 端点默认关闭
  • 指标名称被重命名
  • 曝露规则不同

解决方案

显式重新声明 actuator 曝露设置:

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics

经验教训: “没有错误” 并不等于 “正常工作”。

迁移检查清单与进一步阅读

我们已将每一个破坏性变更、解决方案和坑点整理成结构化的迁移检查清单。

完整的 Spring Boot 3.x → 4.0 迁移指南
🔗

内容包括:

  • 依赖审计步骤
  • 安全迁移模式
  • 测试与 CI 修复
  • Actuator 与可观测性变更

我们正在构建一个真实迁移案例的小目录(非营销文档):
🔗

如果你正在处理 Spring Boot 升级、Java 版本跨越或框架迁移,那里可能会有对你有用的内容。

在你的 Spring Boot 升级过程中,最奇怪的破坏点是什么?
静默的行为变化?
来一起交流经验吧 👇

Back to Blog

相关文章

阅读更多 »

Spring Boot 异常处理

Java 与 Spring Boot 异常处理笔记 1. 什么是 Exception? Exception = 打破程序正常流程的不期望情况。 异常处理的目标……

开启 RUST

我的 Java 到 Rust 的转变之路:更换 technology stack 你好,我叫 Garik,今天我想与大家分享我决定更换 technology stack 的故事。