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

📚 官方迁移资源

相关推荐
N***H4862 小时前
SpringBoot3.3.0集成Knife4j4.5.0实战
java
梦梦代码精2 小时前
《全栈开源智能体:终结企业AI拼图时代》
人工智能·后端·深度学习·小程序·前端框架·开源·语音识别
程序员欣宸2 小时前
LangChain4j实战之十三:函数调用,低级API版本
java·人工智能·ai·langchain4j
Java新手村2 小时前
【订单超时取消怎么设计】
java
阿蒙Amon3 小时前
C#每日面试题-常量和只读变量的区别
java·面试·c#
Victor3563 小时前
Hibernate(42)在Hibernate中如何实现分页?
后端
Victor3563 小时前
Hibernate(41)Hibernate的延迟加载和急加载的区别是什么?
后端
猪猪拆迁队3 小时前
2025年终总结-都在喊前端已死,这一年我的焦虑、挣扎与重组:AI 时代如何摆正自己的位置
前端·后端·ai编程
寻星探路3 小时前
【算法专题】滑动窗口:从“无重复字符”到“字母异位词”的深度剖析
java·开发语言·c++·人工智能·python·算法·ai