SpringBoot 3 开发随笔
SpringBoot 3 版本
2022 年 11 月 24 日,SpringBoot 3.0 正式发布了。此版本包含了 12 个月以来 151 个人的 5700 多次 Commit 的工作结晶。这是自 4.5 年前发布 2.0 以来,Spring Boot 的第一次重大修订。它也是第一个支持 Spring Framework 6.0 和 GraalVM 的 Spring Boot GA 版本。
新变化
- 支持响应式编程
- 支持 Spring Framework 6.0
- 支持 GraalVM native images
- Spring 自身与第三方包版本升级
- 最低支持 JDK 17,最高支持 JDK 19
- 从 Java EE API (Javax) 迁移到 Jakarta EE API
- 自动配置的包位置变化
- 旧版本:
META-INF/spring.factories
- 新版本:
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
- 旧版本:
新特性
- 函数式 Web 开发
- ProblemDetails,用于返回新格式的错误信息
Spring HTTP 客户端的选择
在 Spring 框架中,RestTemplate
、WebClient
和 RestClient
是用于进行 HTTP 请求的不同客户端工具。它们各自具有不同的特性和适用场景。
RestTemplate
简介
RestTemplate
是 Spring 提供的传统同步 HTTP 客户端,自 Spring 3 版本以来一直被广泛使用。
特点
- 同步阻塞:请求是同步执行的,调用线程会阻塞等待响应返回。
- 易于使用:提供了简洁的 API,适合简单的 REST 调用。
- 功能全面:支持多种 HTTP 方法(GET、POST、PUT、DELETE 等)、消息转换、异常处理等。
适用场景
- 适用于简单的、对性能和并发要求不高的应用场景。
- 现有项目中已经使用
RestTemplate
,且不需要迁移到异步 I/O 模型。
注意事项
- Spring 官方已宣布
RestTemplate
进入维护模式,不再推荐用于新项目的开发,未来可能会逐步弃用。
- Spring 官方已宣布
WebClient
简介
WebClient
是 Spring 5 引入的非阻塞、响应式 HTTP 客户端,作为 Spring WebFlux 的一部分提供。
特点
- 异步非阻塞:基于 Reactor 框架,支持异步和响应式编程模式,大大提升应用的并发性能。
- 功能强大:支持流式数据处理、请求过滤器、重试机制等高级功能。
- 灵活性高:可以与响应式框架(如 Reactor、RxJava)无缝集成,也支持同步调用。
适用场景
- 适用于需要高并发、低延迟的微服务架构或响应式应用。
- 新项目开发,尤其是采用 Spring WebFlux 的项目。
示例代码
1 | WebClient webClient = WebClient.builder() |
RestClient
简介
RestClient
是 Spring 在较新版本(比如 Spring Framework 6)中引入的现代化 HTTP 客户端,旨在统一和简化客户端调用。
特点
- 声明式 API:支持通过接口定义 REST 客户端,类似于 Feign 的方式,提升代码的可读性和可维护性。
- 类型安全:通过接口和注解定义请求和响应,减少运行时错误。
- 集成现代特性:更好地支持 Kotlin、协程等现代编程特性。
适用场景
- 适用于希望使用声明式方式定义 HTTP 客户端的项目。
- 需要类型安全和高可维护性的应用。
示例代码
1 |
|
最佳实践
- 新项目开发:推荐使用
WebClient
或RestClient
,其中WebClient
更适合需要响应式和异步处理的场景,而RestClient
提供了更现代化的声明式 API。 - 现有项目维护:如果项目已经广泛使用
RestTemplate
,且迁移成本较高,可以继续使用RestTemplate
,但建议规划逐步迁移到WebClient
或RestClient
。 - 性能需求:对于高并发和低延迟要求的应用,
WebClient
和RestClient
提供了更好的性能和扩展性。