Spring Boot 4.0.1 时变更清单

Spring Boot 4.0.1(基于 Spring Framework 6.1+ / Spring Data 2023.1+) 是一次重大升级,有大量破坏性或需适配的变化。以下是 开发者在升级到 Spring Boot 4.0.1 时必须重点关注的修改清单,按模块分类整理:


🔥 一、基础环境与依赖变更

变更点 说明 影响
JDK 最低要求 Java 17 不再支持 Java 8/11 必须升级 JDK
Jakarta EE 9+(包名迁移) javax.*jakarta.* 所有 Servlet、Validation、Persistence 相关代码需更新
移除 Undertow 支持 因不兼容 Servlet 6.1 原使用 Undertow 的项目必须切换到 Tomcat/Jetty
Tomcat 10.1+ / Jetty 12+ 内嵌容器版本升级 自定义容器配置需验证

✅ 示例:

java 复制代码
// 旧(Boot 2.x/3.x)
import javax.servlet.http.HttpServletRequest;
// 新(Boot 4.x)
import jakarta.servlet.http.HttpServletRequest;

🗄️ 二、数据访问层(Data Access)

1. Redis

变更 说明
GenericJackson2JsonRedisSerializerGenericJacksonJsonRedisSerializer 包路径变为 org.springframework.data.redis.serializer.json.*
默认序列化行为未变,但必须显式传入 ObjectMapper 推荐自定义配置时间、null 处理等

2. JPA / Hibernate

变更 说明
Hibernate 6.2+ 查询语法、类型映射有 breaking change
@JoinColumn 默认 nullable = true 行为调整 需检查外键约束
HibernateJpaVendorAdapter 移除部分旧属性 databasePlatform 改为 hibernate.dialect

3. JDBC / R2DBC

变更 说明
JdbcTemplate 增强 新增 queryForStream() 等方法
DatabaseClient(R2DBC)被弃用 推荐使用 R2dbcEntityTemplate 或直接用 ConnectionFactory

🌐 三、Web 层(MVC & WebFlux)

1. API 版本控制(新特性)

java 复制代码
@GetMapping("/users")
@ApiVersion("2.0") // 框架原生支持
public List<User> getUsersV2() { ... }

需配置:

yaml 复制代码
spring:
  mvc:
    apiversion:
      enabled: true
      default: "1.0"

2. 声明式 HTTP 客户端

替代 Feign/OpenFeign:

java 复制代码
@HttpExchange("https://api.example.com")
public interface UserService {
    @GetExchange("/users/{id}")
    User getUser(@PathVariable Long id);
}

需启用扫描:

java 复制代码
@SpringBootApplication
@ImportHttpServices(basePackages = "com.example.client")
public class App {}

3. PathPattern 解析器默认启用

  • URL 路径匹配更严格(如 /api/v1/users//api/v1/users

  • 若需旧版 AntPathMatcher 行为,需手动配置:

    java 复制代码
    @Bean
    public PathMatcher pathMatcher() {
        return new AntPathMatcher();
    }

🔐 四、安全(Spring Security)

变更 说明
Security 配置 DSL 变更 HttpSecurity 方法链有调整
WebSecurityConfigurerAdapter 彻底移除 必须使用 @Bean SecurityFilterChain 方式
默认启用 CSRF + CORS 安全策略 无状态 API 需显式关闭 CSRF

✅ 新写法示例:

java 复制代码
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http
        .authorizeHttpRequests(auth -> auth
            .requestMatchers("/public/**").permitAll()
            .anyRequest().authenticated()
        )
        .csrf(csrf -> csrf.disable()); // 显式关闭
    return http.build();
}

📊 五、监控与可观测性(Actuator & Observability)

变更 说明
OpenTelemetry 成为首选 替代部分 Micrometer Tracing 功能
新增 Starter:spring-boot-starter-opentelemetry 自动集成 OTLP Exporter
Actuator 健康检查字段变更 如 SSL 检查中 WILL_EXPIRE_SOONexpiringChains
/metrics 端点格式标准化(OpenMetrics 兼容) Prometheus 抓取无需转换

⚙️ 六、配置属性(application.yml)重命名

旧属性 新属性 说明
management.tracing.enabled management.tracing.export.enabled 追踪导出开关
spring.dao.exceptiontranslation.enabled spring.persistence.exceptiontranslation.enabled 异常翻译配置
server.servlet.context-path 不变 但底层使用 jakarta.servlet

💡 使用 mvn spring-boot:run 启动时,若配置项过期,控制台会打印 WARNING 提示新名称


🧪 七、测试支持变更

变更 说明
Testcontainers 深度集成 @ServiceConnection 自动配置 Redis、PostgreSQL 等
@AutoConfigureTestDatabase 行为调整 默认不再替换为内存数据库(除非显式指定)
MockMvc 默认使用 Jakarta Servlet API 测试中需使用 MockHttpServletRequest(jakarta 包)

🧩 八、其他重要变更

模块 变更
Kotlin 新增 spring-boot-starter-kotlin-serialization
GraalVM Native Image 原生编译支持大幅增强,spring-native 模块合并进主干
Task Execution 支持多 TaskDecorator(上下文传递更灵活)
Null Safety 推荐使用 org.jspecify.annotations.Nullable / @NonNull

📚 官方迁移资源

相关推荐
坚定信念,勇往无前5 小时前
Maven 私有仓库-nexus
java
Minner-Scrapy6 小时前
Scrapy 2.17 源码解析:Scheduler 调度器与磁盘/内存双队列
java·爬虫·python·scrapy·网络爬虫·twisted
晚风醉蝶6 小时前
1-11-奇偶排序-OddEvenSort
java·数据结构·算法
陈随易6 小时前
Bun v1.4 更新总结:把浏览器、图片、定时任务和工程工具都装进一个运行时
前端·后端·程序员
夏天拐跑了西瓜6 小时前
Spring Cloud 微服务实战(三):一个服务挂了,凭什么拖垮整个系统?Sentinel 限流熔断实战
java·spring cloud·微服务
2601_967264286 小时前
Jetpack Compose 实践指南:从入门到进阶
java·学习
人间凡尔赛7 小时前
2026 后端架构三驾马车:Wasm 容器上 K8s、存算分离与 AI 原生
后端·云原生·架构
m0_587383007 小时前
社区家政系统开发实战:从需求分析到上线部署全指南
java·spring boot·spring·需求分析
凤山老林7 小时前
动态 i18n 体系落地:Spring Boot 多租户热加载与前后端协同实践
java·spring boot·后端·i18n
东风破_7 小时前
TypeScript 高级类型进阶:keyof、Exclude、Record 与类型组合思想
前端·后端·typescript