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

📚 官方迁移资源

相关推荐
Mahir085 小时前
Spring 循环依赖深度解密:从问题本质到三级缓存源码级解析
java·后端·spring·缓存·面试·循环依赖·三级缓存
RyFit6 小时前
SpringAI 常见问题及解决方案大全
java·ai
石山代码6 小时前
C++ 内存分区 堆区
java·开发语言·c++
绝知此事7 小时前
【算法突围 01】线性结构与哈希表:后端开发的收纳术
java·数据结构·算法·面试·jdk·散列表
无风听海7 小时前
C# 隐式转换深度解析
java·开发语言·c#
一只大袋鼠7 小时前
Git 进阶(二):分支管理、暂存栈、远程仓库与多人协作
java·开发语言·git
德思特8 小时前
从 Dify 配置页理解 RAG 的重要参数
java·人工智能·llm·dify·rag
YOU OU8 小时前
Spring IoC&DI
java·数据库·spring
один but you9 小时前
从可变参数到 emplace:现代 C++ 性能优化的核心组合
java·开发语言
IT_陈寒9 小时前
Redis缓存击穿把我整不会了,原来还有这手操作
前端·人工智能·后端