当前位置: 首页 > news >正文

从 Spring Boot 2.x 到 Spring Boot 3.x:全面对比与快速上手指南

一、前言

Spring Boot 自诞生以来,凭借其“约定优于配置”的理念、开箱即用的设计和强大的生态支持,迅速成为 Java 开发领域的主流框架。随着 Java 语言的持续演进和开发者需求的提升,Spring Boot 也在不断升级。Spring Boot 3.x 是一次重大版本升级,不仅带来了对现代 Java 特性的全面支持,还对底层架构、依赖管理和性能进行了深度优化。

本文将从以下几个方面,详细对比 Spring Boot 2.x 与 3.x 的差异,并提供一套完整的从 2.x 迁移到 3.x 的实战指南。


二、Spring Boot 2.x 与 3.x 的核心区别

1. Java 版本要求的变化

版本支持的最低 Java 版本支持的最高 Java 版本
Spring Boot 2.xJava 8(推荐 Java 11)Java 17(兼容)
Spring Boot 3.xJava 17Java 21(推荐)

说明:

  • Spring Boot 2.x 支持 Java 8 ~ Java 17,但官方推荐使用 Java 11。
  • Spring Boot 3.x 强制要求最低 Java 17,不再支持 Java 8 和 Java 11。
  • 这一变化意味着你必须升级 JDK 环境,同时也能够使用 Java 17 的新特性,如密封类、模式匹配、switch 表达式等。

2. Jakarta EE 的迁移(javax → jakarta)

这是 Spring Boot 3.x 中最显著的变化之一。

项目包名变化
Spring Boot 2.xjavax.*(Java EE)
Spring Boot 3.xjakarta.*(Jakarta EE)

说明:

  • 由于 Oracle 将 Java EE 移交给 Eclipse 基金会,后者将其更名为 Jakarta EE,所有包名从 javax.* 改为 jakarta.*
  • 所有与 Web、Servlet、JPA、Validation、WebSocket 等相关的类都受到影响。
  • 例如:
    • javax.servlet.http.HttpServletjakarta.servlet.http.HttpServlet
    • javax.persistence.Entityjakarta.persistence.Entity
    • javax.validation.constraints.NotNulljakarta.validation.constraints.NotNull

迁移建议:

  • 使用 IDE(如 IntelliJ IDEA 或 Eclipse)进行全局替换。
  • 检查第三方库是否支持 Jakarta EE 9+。

3. Spring Framework 版本升级

Spring Boot 版本Spring Framework 版本
2.x5.x
3.x6.0.x(甚至 6.1.x)

说明:

  • Spring Framework 6 是 Spring Boot 3.x 的基础,带来了对 Java 17 的全面支持。
  • Spring 6 引入了新的 AOT(Ahead-of-Time)编译机制,用于支持 GraalVM Native Image。
  • Spring 6 不再支持 Java 8、Java 9、Java 10、Java 11,仅支持 Java 17 及以上。

4. 对 GraalVM Native Image 的原生支持

Spring Boot 3.x 原生支持 GraalVM Native Image,这是其一大亮点。

  • 可以将 Spring Boot 应用编译为原生可执行文件(Native Executable),极大提升启动速度和降低内存占用。
  • 适用于 Serverless、云原生等对冷启动敏感的场景。
  • 使用方式:
    • 添加 spring-boot-starter-aot 依赖
    • 使用 native-maven-pluginnative-gradle-plugin 构建原生镜像

示例:

<plugin><groupId>org.graalvm.buildtools</groupId><artifactId>native-maven-plugin</artifactId>
</plugin>

限制:

  • 不支持反射、动态代理等 Java 特性(需在构建时配置元数据)
  • 部分库(如 Hibernate、Spring Data)需要更新以支持 Native Image

5. 自动配置机制改进

Spring Boot 3.x 引入了新的自动配置机制:

  • 使用 @AutoConfiguration 注解替代原来的 @ConditionalOnClass 等组合注解
  • 自动配置类现在可以更清晰地定义加载顺序(@Order
  • 提供了更好的自动配置报告和诊断信息(--debug

示例:

@AutoConfiguration
public class MyAutoConfiguration {// ...
}

6. Actuator 端点增强

  • Actuator 模块全面升级,支持更细粒度的监控和管理
  • 新增了 /actuator/health/liveness/actuator/health/readiness 端点,用于健康检查
  • 默认端点路径从 /actuator/** 变为 /actuator/**(保持不变),但内部实现更健壮

7. 配置属性变更与弃用

Spring Boot 3.x 对大量配置属性进行了重命名、合并或移除:

  • 使用 spring-boot-properties-migrator 工具可以帮助识别旧配置并提供迁移建议
  • 示例变更:
    • spring.jpa.hibernate.use-new-id-generator-mappings 已弃用
    • spring.datasource.configuration 替换为 spring.datasource.hikari.*

8. 安全模块更新(Spring Security 6)

Spring Boot 3.x 默认使用 Spring Security 6:

  • 更严格的默认安全策略
  • 新的 SecurityFilterChain 配置方式(替代旧的 WebSecurityConfigurerAdapter
  • 更好的 OAuth2 和 JWT 支持

示例新配置方式:

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {http.authorizeHttpRequests(auth -> auth.requestMatchers("/public/**").permitAll().anyRequest().authenticated()).formLogin(Customizer.withDefaults());return http.build();
}

三、从 Spring Boot 2.x 迁移到 3.x 的实战指南

1. 准备工作

  • 升级 JDK 到 Java 17 或以上
  • 更新 IDE 插件(如 Spring Tools Suite、IntelliJ IDEA 插件)
  • 检查项目依赖是否支持 Spring Boot 3.x(查看 Maven Central 或 GitHub)

2. 修改项目依赖

Maven 项目示例:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.0</version> <!-- 使用最新版本 --><relativePath/>
</parent>
Gradle 项目示例:
plugins {id 'org.springframework.boot' version '3.3.0'id 'io.spring.dependency-management' version '1.1.2'
}

3. 替换包名(javax → jakarta)

使用 IDE 的全局搜索替换功能,将所有 javax.* 替换为 jakarta.*

例如:

import javax.servlet.http.HttpServlet;
// 替换为
import jakarta.servlet.http.HttpServlet;

4. 使用 Spring Boot Properties Migrator 工具

添加依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-properties-migrator</artifactId><scope>runtime</scope>
</dependency>

运行应用时会输出配置属性的迁移建议。


5. 检查第三方库兼容性

确保所有依赖库支持 Spring Boot 3.x 和 Jakarta EE 9+,例如:

依赖库是否支持 Spring Boot 3.x
Hibernate ORM 6.x
Spring Data JPA 3.x
Thymeleaf 3.1+
Flyway 9+
Liquibase 4.17+
MyBatis 3.5.10+

6. 使用 AOT 编译(可选)

如果你希望构建原生镜像,可以尝试使用 AOT 编译:

./mvnw spring-boot:build-image -DskipTests

或使用 GraalVM 插件构建原生可执行文件。


7. 单元测试与集成测试

  • 升级测试依赖(如 JUnit 5、Mockito 4)
  • 使用 @SpringBootTestTestRestTemplate 进行集成测试
  • 检查是否所有自动配置类都正确加载

四、Spring Boot 3.x 新特性一览(建议掌握)

特性说明
AOT 编译支持支持提前编译,用于 GraalVM Native Image
Jakarta EE 9+ 支持所有 API 使用 jakarta.*
Spring Security 6更强的安全控制、新的配置方式
Actuator 增强支持 Liveness/Readiness 探针
自动配置改进使用 @AutoConfiguration 替代条件注解组合
配置属性报告更清晰的配置属性提示和迁移建议
GraalVM Native Image 支持可构建原生可执行文件
响应式编程增强WebFlux、RSocket、Project Reactor 更完善

五、总结

Spring Boot 3.x 是一个具有里程碑意义的版本,它不仅顺应了 Java 语言的发展趋势,也大幅提升了开发效率和运行性能。尽管从 2.x 迁移到 3.x 需要一定的工作量,尤其是包名替换、依赖更新和配置迁移,但这些变化是值得的。

建议学习路径:

  1. 学习 Java 17 新特性
  2. 掌握 Jakarta EE 9+ 包名变化
  3. 熟悉 Spring Framework 6 的新特性
  4. 实践 GraalVM Native Image 构建
  5. 使用 Spring Security 6 的新配置方式
  6. 深入理解 Spring Boot 3.x 的自动配置机制

六、参考资料

  • Spring Boot 3.0 Release Notes
  • Spring Framework 6 Migration Guide
  • Jakarta EE 9 Specification
  • Spring Native Documentation
http://www.dtcms.com/a/286509.html

相关文章:

  • 高精度流体分配系统的设计与分析
  • 加速度计和气压计、激光互补滤波融合算法
  • 接口测试时如何上传文件(图片、安装包等)
  • 基于DeepSeek大模型实现Function Call功能
  • elementui-admin构建
  • 行为型设计模式:解释器模式
  • ES v.s Milvus v.s PG
  • 【unitrix】 6.8 加一运算(add_one.rs)
  • ubuntu源码安装ceres-solves
  • docker--Dockerfile
  • CherryStudio+playwright-mcp-server实现AI自动化
  • 20250718-1-Kubernetes 应用程序生命周期管理-应用部署、升级、弹性_笔记
  • C语言-一维数组,二维数组
  • 七彩喜康养平台:大数据时代,养老服务从智能走向智慧
  • 实习十三——传输层协议
  • iOS 数据持久化
  • iOS OC 图片压缩
  • 如何快速下载 MT4 交易平台
  • Linux学习之认识Linux的基本指令
  • LeetCodeHot100---螺旋矩阵---一题两解
  • Unity 常见数据结构分析与实战展示 C#
  • 基于单片机自行车自动防盗报警系统设计
  • VUE目录结构详解
  • NW983NW988美光固态闪存NW991NW992
  • 无符号乘法运算的硬件逻辑实现 ————取自《湖科大教书匠》
  • PAT 1012 The Best Rank
  • QML vscode语法高亮和颜色区分。
  • 【vLLM 学习】Encoder Decoder Multimodal
  • Kotlin集合过滤
  • 有效的括号数据结构oj题(力口20)