Spring Boot 4.0 简介

Spring Boot 4.0 是 Spring Boot 框架的最新主要版本,于 2025 年 11 月正式发布。该版本带来了许多新特性和改进,同时对底层技术栈进行了重大升级。

主要特性

1. Java 和 JVM 支持

Spring Boot 4.0 要求最低 JDK 版本为 17(LTS 版本),并推荐使用 JDK 25(2025 年 9 月发布的版本)。这一变化确保了框架能够利用最新的 Java 特性和性能改进。

2. Jakarta EE 11 对齐

Spring Boot 4.0 完全迁移到 Jakarta EE 11,这意味着所有 javax.* 包都已更改为 jakarta.* 包。这是与之前版本的重大不兼容改动之一。

3. HTTP Service Clients

Spring Boot 4.0 引入了 HTTP Service Clients 功能,允许开发者通过注解普通 Java 接口来创建 HTTP 客户端:

1
2
3
4
5
6
7
8
9
@HttpExchange(url = "https://api.example.com")
public interface UserServiceClient {

@GetExchange("/users/{id}")
User getUser(@PathVariable Long id);

@PostExchange("/users")
User createUser(@RequestBody User user);
}

4. API 版本控制

新增了对 API 版本控制的自动配置支持,可以通过配置属性来启用:

1
2
3
4
5
spring:
mvc:
apiversion:
enabled: true
header: X-API-Version

5. 虚拟线程支持

Spring Boot 4.0 原生支持 Java 的虚拟线程(Virtual Threads),可以显著提高并发性能:

1
2
3
4
spring:
threads:
virtual:
enabled: true

6. OpenTelemetry Starter

新增了 spring-boot-starter-opentelemetry starter,简化了分布式追踪和指标收集的配置:

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-opentelemetry</artifactId>
</dependency>

7. Kotlin 序列化支持

新增了对 Kotlin Serialization 的支持,提供了 spring-boot-starter-kotlin-serialization starter。

8. MongoDB 健康指标改进

MongoDB 健康指标不再依赖 Spring Data MongoDB,可以直接使用 MongoDB Java Driver。

不兼容的改动

1. 包名迁移

所有 javax.* 包已迁移到 jakarta.*

1
2
3
4
5
// 旧版本
import javax.servlet.http.HttpServletRequest;

// Spring Boot 4.0
import jakarta.servlet.http.HttpServletRequest;

2. Undertow 支持移除

由于 Undertow 尚未兼容 Servlet 6.1,Spring Boot 4.0 移除了对 Undertow 的支持。

3. 配置属性变更

多个配置属性名称发生了变更:

1
2
3
4
5
6
7
8
9
10
11
# 旧版本
spring:
dao:
exceptiontranslation:
enabled: true

# Spring Boot 4.0
spring:
persistence:
exceptiontranslation:
enabled: true

4. SSL 健康检查变更

SSL 健康检查的响应格式发生了变化,WILL_EXPIRE_SOON 状态已被移除。

升级步骤

1. 准备工作

在升级到 Spring Boot 4.0 之前,建议先升级到 Spring Boot 3.5:

1
2
3
4
5
6
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.0</version>
<relativePath/>
</parent>

2. 更新依赖版本

将 Spring Boot 版本更新为 4.0.0:

1
2
3
4
5
6
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.0.0</version>
<relativePath/>
</parent>

3. 包名迁移

使用 IDE 的重构功能将所有 javax.* 包引用更新为 jakarta.*

1
2
3
4
5
# 在项目中查找所有 javax 包引用
grep -r "import javax" src/

# 替换为 jakarta
find src/ -name "*.java" -exec sed -i 's/javax\./jakarta\./g' {} +

4. 配置属性更新

检查并更新 application.ymlapplication.properties 中的配置属性:

1
2
3
4
5
6
7
# 更新配置属性
management:
tracing:
enabled: true # 旧版本
tracing:
export:
enabled: true # Spring Boot 4.0

5. 移除 Undertow 依赖

如果项目中使用了 Undertow,需要移除相关依赖并切换到其他 Web 服务器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- 移除 Undertow 依赖 -->
<!--
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
-->

<!-- 添加 Tomcat 依赖(默认) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>

6. 更新 MongoDB 配置

如果使用了 MongoDB,更新相关配置:

1
2
3
4
5
6
7
8
9
10
11
# 更新 MongoDB 配置属性
spring:
data:
mongodb:
# 旧版本属性
# uri: mongodb://localhost:27017/mydb

# Spring Boot 4.0 属性
host: localhost
port: 27017
database: mydb

7. 测试和验证

完成所有升级步骤后,进行全面的测试:

1
2
3
4
5
6
7
8
# 运行单元测试
./mvnw test

# 运行集成测试
./mvnw verify

# 启动应用进行功能测试
./mvnw spring-boot:run

依赖升级

Spring Boot 4.0 升级了大量第三方依赖:

  • Spring Framework 7.0
  • Micrometer 1.16
  • Reactor 2025.0
  • Hibernate 7.1
  • Jackson 3.0
  • Tomcat 11.0
  • Jetty 12.1

性能改进

1. 虚拟线程优化

通过启用虚拟线程可以显著提高应用的并发处理能力:

1
2
3
4
5
6
7
8
9
10
@RestController
public class UserController {

@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) throws InterruptedException {
// 使用虚拟线程处理阻塞操作
Thread.sleep(1000);
return userService.findById(id);
}
}

2. 启动优化

Spring Boot 4.0 在应用启动时间方面进行了优化,特别是在使用 GraalVM Native Image 时。

总结

Spring Boot 4.0 带来了许多令人兴奋的新特性和改进,包括对最新 Java 版本的支持、Jakarta EE 11 对齐、HTTP Service Clients、API 版本控制等。虽然升级过程中需要处理一些不兼容的改动,但这些改进将为应用带来更好的性能和更现代化的技术栈。

升级到 Spring Boot 4.0 的主要步骤包括:

  1. 先升级到 Spring Boot 3.5
  2. 更新依赖版本到 4.0.0
  3. 迁移 javax 包到 jakarta 包
  4. 更新配置属性
  5. 移除 Undertow 依赖(如使用)
  6. 全面测试验证

通过遵循这些步骤,您可以顺利将现有应用升级到 Spring Boot 4.0,并享受新版本带来的各种优势。