---
url: /diary/spring/springboot4-overview/index.md
description: Spring Boot 4 核心变化概览，包括基线要求升级、模块化重构、Starter 体系重组，以及从 Spring Boot 3.x 迁移的完整路径。
---
## Spring Boot 4 是什么

Spring Boot 4.0 于 **2025 年 11 月 20 日** 正式发布，当前最新版本为 **4.0.5**。这不是一次简单迭代，而是一次**架构层面的重大重构**——底层基于 **Spring Framework 7.0**，整个 Spring 生态同步大版本升级。

核心主题：**模块化拆分 + Jackson 3 迁移 + 云原生深化 + 性能飞跃**。

## 基线要求对比

从 Spring Boot 3.x 升级到 4.x，最低基线全面抬升：

| 技术指标 | Spring Boot 3.0 | Spring Boot 4.0 |
|---|---|---|
| 最低 Java 版本 | Java 17 | Java 17（推荐 **Java 21+** 以启用虚拟线程等全部特性） |
| 兼容 Java 版本 | 最高 Java 21 | 最高 **Java 26** |
| Spring Framework | 6.0.x | **7.0.x** |
| Jakarta EE | 9（兼容 10） | **11** |
| Servlet 规范 | 6.0 | **6.1** |
| Kotlin 基线 | 1.7+ | **2.2+** |
| GraalVM | 原生镜像（实验） | **GraalVM 25+**（生产级） |
| 内嵌 Web 容器 | Tomcat 10, Jetty 11, Undertow 2.0 | **Tomcat 11.0.x, Jetty 12.1.x**（**Undertow 已移除**） |
| Maven | 3.5+ | **3.6.3+** |
| Gradle | 7.0+ | **8.14+ 或 9.x** |
| JPA 规范 | 3.0 | **3.2** |
| Bean Validation | 3.0 | **3.1** |

## 模块化重构

Spring Boot 4 最大的架构变化——将原来庞大的 `spring-boot-autoconfigure` 拆分为多个专注单一功能的小模块。

### 拆分前（Spring Boot 3.x）

所有自动配置打包在一个大模块里：

```
spring-boot-autoconfigure（~2MB，包含所有技术的自动配置）
```

### 拆分后（Spring Boot 4.x）

每个技术都有独立模块，命名规范为 `spring-boot-<technology>`，包名为 `org.springframework.boot.<technology>`：

```
spring-boot-jackson          # Jackson JSON 处理
spring-boot-data-redis       # Redis 集成
spring-boot-security         # Spring Security
spring-boot-web              # Web 相关
spring-boot-actuator         # 监控端点
...
```

**好处**：原生镜像编译更高效（不需要的模块不会打进镜像），依赖更清晰。

## Starter 体系重组

### 新的 Starter 命名

每个技术都有独立的 starter 和配套的 **test starter**：

```xml
<!-- 主 starter -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 对应的测试 starter（已传递依赖 spring-boot-starter-test，无需重复声明） -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis-test</artifactId>
    <scope>test</scope>
</dependency>
```

原来只需要第三方依赖的技术（如 Flyway、Liquibase）现在也有了专属 starter。

### Starter 重命名

| 旧名称（Spring Boot 3.x） | 新名称（Spring Boot 4.x） | 说明 |
|---|---|---|
| `spring-boot-starter-web` | `spring-boot-starter-webmvc` | 旧名保留为 deprecated |
| `spring-boot-starter-aop` | `spring-boot-starter-aspectj` | - |

### Classic Starter 过渡方案

提供 `spring-boot-starter-classic` 作为迁移过渡：

```xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-classic</artifactId>
</dependency>
```

包含所有模块但**不带来传递依赖**，让旧项目能先跑起来，再逐步替换为专用 starter。

## Spring 生态版本一览

Spring Boot 4 带动整个 Spring 生态大版本升级：

| 生态组件 | 版本 |
|---|---|
| Spring Framework | 7.0 |
| Spring Security | 7.0 |
| Spring Data | 2025.1 |
| Spring AMQP | 4.0 |
| Spring Batch | 6.0 |
| Spring Integration | 7.0 |
| Spring for Apache Kafka | 4.0 |
| Spring GraphQL | 2.0 |
| Spring Session | 4.0 |
| Spring REST Docs | 4.0 |

## 迁移路径

官方推荐的迁移分三步走：

### 第一步：升级到 Spring Boot 3.5 最新版

确保项目在 3.5 上运行正常。Spring Boot 3.5 已经预先引入了部分 4.0 的废弃警告，可以提前发现需要修改的地方。

### 第二步：使用 Classic Starter 快速过渡到 4.0

引入 `spring-boot-starter-classic`，处理编译错误和废弃警告。此时项目应该能正常启动运行。

### 第三步：逐步替换为专用 Starter

将 Classic Starter 中的通配依赖替换为项目实际需要的专用 starter，移除不再使用的依赖。最终移除 Classic Starter。

### 迁移检查清单

* \[ ] Java 版本 >= 17（推荐 21+）
* \[ ] Maven >= 3.6.3 或 Gradle >= 8.14
* \[ ] Undertow → 迁移到 Tomcat 或 Jetty（Undertow 不支持 Servlet 6.1 已被移除）
* \[ ] `@MockBean` / `@SpyBean` → `@MockitoBean` / `@MockitoSpyBean`
* \[ ] Jackson 2 → Jackson 3（见 [Jackson 配置与迁移](./02.Jackson配置与迁移.md)）
* \[ ] `spring-boot-starter-web` → `spring-boot-starter-webmvc`
* \[ ] `spring-boot-starter-aop` → `spring-boot-starter-aspectj`
* \[ ] `RestTemplate` → `RestClient` 或声明式 HTTP 客户端（RestTemplate 进入弃用倒计时）
* \[ ] Spring Session Redis 属性路径变更（见 [Redis 集成使用](./03.Redis集成使用.md)）
* \[ ] Spring Batch 默认不再使用数据库，需要数据库存储需引入 `spring-boot-starter-batch-jdbc`
* \[ ] `@SpringBootTest` 不再自动提供 MockMvc/TestRestTemplate，需加对应 `@AutoConfigure*` 注解
* \[ ] Spock 测试框架不再支持（需迁移到 JUnit 5）
* \[ ] `spring.devtools.livereload.enabled` 默认变为 `false`

***

> 相关文章：
>
> * [Jackson 配置与迁移](./02.Jackson配置与迁移.md)
> * [Redis 集成使用](./03.Redis集成使用.md)
> * [MyBatis-Flex 实战](./04.MyBatis-Flex实战.md)
> * [其他核心变更](./05.其他核心变更.md)
