引言
Spring Boot 3.x 是一次重大升级,基于 Spring Framework 6,要求 JDK 17+,带来了 Jakarta EE 迁移、原生镜像支持、可观测性增强等诸多新特性。
1. JDK 17 基线
Spring Boot 3 将最低 Java 版本要求提升至 JDK 17,这意味着你可以充分利用 Java 17 的所有新特性:
- Record 类:简洁的数据载体
- 密封类(Sealed Classes):限制继承层次
- 模式匹配(Pattern Matching)
- Text Blocks:多行字符串
- Switch 表达式
// 使用 Record 定义 DTO
public record UserDto(Long id, String name, String email) {
// 自动生成构造器、getter、equals、hashCode、toString
}
2. Jakarta EE 9+ 迁移
这是最重要的破坏性变更。所有 javax.* 包名改为 jakarta.*:
| Spring Boot 2.x | Spring Boot 3.x |
|---|---|
javax.persistence.* |
jakarta.persistence.* |
javax.servlet.* |
jakarta.servlet.* |
javax.validation.* |
jakarta.validation.* |
javax.transaction.* |
jakarta.transaction.* |
// Spring Boot 3 的 Controller
@RestController
@RequestMapping("/api/v1")
public class UserController {
@GetMapping("/users/{id}")
public ResponseEntity<UserDto> getUser(@PathVariable Long id) {
// Jakarta Validation
return ResponseEntity.ok(new UserDto(id, "张三", "zhangsan@example.com"));
}
}
3. 原生镜像(GraalVM Native Image)
Spring Boot 3 对 GraalVM 原生镜像提供了一等公民支持,可以将应用编译为独立的可执行文件:
- 启动速度:从秒级降至毫秒级(通常 < 100ms)
- 内存占用:减少 50%-80%
- 容器化友好:无需 JVM,镜像体积大幅缩减
# 使用 GraalVM 编译原生镜像
./mvnw -Pnative native:compile
# 直接运行可执行文件
./target/my-app
4. 可观测性(Observability)
Spring Boot 3 引入了全新的可观测性支持,基于 Micrometer 和 Micrometer Tracing:
- Metrics:指标收集,支持 Prometheus、InfluxDB 等
- Tracing:分布式追踪,支持 Zipkin、Jaeger
- Health:健康检查端点增强
# 开启所有 Actuator 端点
management:
endpoints:
web:
exposure:
include: health,info,metrics,prometheus
tracing:
sampling:
probability: 1.0
5. HTTP 接口声明式客户端
Spring Framework 6 引入了 @HttpExchange 注解,提供了声明式的 HTTP 客户端:
@HttpExchange("/api/v1")
public interface UserClient {
@GetExchange("/users/{id}")
UserDto getUser(@PathVariable Long id);
@PostExchange("/users")
UserDto createUser(@RequestBody UserDto user);
}
// 使用
@Bean
public UserClient userClient() {
WebClient client = WebClient.create("http://localhost:8080");
return HttpServiceProxyFactory
.builderFor(WebClientAdapter.create(client))
.build()
.createClient(UserClient.class);
}
6. Problem Details(RFC 7807)
Spring Boot 3 内置支持 RFC 7807 Problem Details,提供标准化的错误响应格式:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ProblemDetail handleNotFound(ResourceNotFoundException ex) {
ProblemDetail problem = ProblemDetail
.forStatusAndDetail(HttpStatus.NOT_FOUND, ex.getMessage());
problem.setTitle("Resource Not Found");
problem.setProperty("timestamp", Instant.now());
return problem;
}
}
总结
Spring Boot 3 是一次质的飞跃。JDK 17 基线、Jakarta EE 迁移、原生镜像支持、增强的可观测性和声明式 HTTP 客户端,都让它在性能和开发体验上大幅领先 2.x 版本。如果你正在开启新项目,Spring Boot 3 是最佳选择。