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

📚 官方迁移资源

相关推荐
spencer_tseng18 小时前
Stream not available [SysDictDataMapper.xml]
xml·java
蒸蒸yyyyzwd1 天前
cpp对象模型学习笔记1.1-2.8
java·笔记·学习
qq_297574671 天前
【实战教程】SpringBoot 集成阿里云短信服务实现验证码发送
spring boot·后端·阿里云
程序员徐师兄1 天前
Windows JDK11 下载安装教程,适合新手
java·windows·jdk11 下载安装·jdk11 下载教程
RANCE_atttackkk1 天前
[Java]实现使用邮箱找回密码的功能
java·开发语言·前端·spring boot·intellij-idea·idea
五岳1 天前
DTS按业务场景批量迁移阿里云MySQL表实战(下):迁移管理平台设计与实现
java·应用·dts
韩立学长1 天前
【开题答辩实录分享】以《智能大学宿舍管理系统的设计与实现》为例进行选题答辩实录分享
数据库·spring boot·后端
zhougl9961 天前
Java 所有关键字及规范分类
java·开发语言
Python 老手1 天前
Python while 循环 极简核心讲解
java·python·算法
java1234_小锋1 天前
Java高频面试题:MyISAM索引与InnoDB索引的区别?
java·开发语言