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

📚 官方迁移资源

相关推荐
豆角焖肉9 分钟前
Maven进阶与搭建私服
java·maven
大不点wow20 分钟前
Java序列化与反序列化:让对象走出JVM
java·开发语言·jvm
止语Lab23 分钟前
好的 DX 不等于少写代码——三种语言的摩擦力设计课
后端
吃饱了得干活24 分钟前
别再手动解析 LLM 输出了!LangChain 四种结构化输出方案对比
后端·python·langchain
噢,我明白了25 分钟前
Java中日期和字符串的处理
java·开发语言·日期
程序员天天困29 分钟前
Arthas trace 命令怎么用?一行定位最慢那行代码
jvm·后端
Huiturn29 分钟前
GPT 5.6 连续编码 10 小时,纯 Python 啃下 Word 二进制格式——doc2docx 实现拆解
后端
dkbnull32 分钟前
Spring Boot请求处理组件对比详解
java·spring boot
jun_bai33 分钟前
Orthanc服务器使用java上传dicom影像文件
java·运维·服务器
顺风尿一寸35 分钟前
记一次 Spring AOP 与定时任务引发的死锁排查
java