Spring Cloud 团队近期正式发布了其 2025.1.0 版本,代号为 Oakwood。可别被这个看似“小版本”的编号迷惑了——它实质上是一次基于 Spring Boot 4.0 和 Spring Framework 7.0 构建的重大升级。自2020年起,Spring Cloud 采用了年份命名方式,因此 2025.1.0 这个数字背后,是一次破坏性和重要性都堪比以往主版本发布的彻底革新。
然而,当开发者们仔细阅读官方发布日志时,心情恐怕有些复杂。这个曾经定义了Java 微服务领域事实标准的王者,此次更新更像是一场“大瘦身”:被移除或边缘化的功能,甚至比新增的还要多。
回想2014到2015年,微服务架构方兴未艾。Netflix 开源了一套完整的微服务组件,而 Spring Cloud 的诞生,将这些组件整合成一套开箱即用的解决方案,迅速解决了服务发现、负载均衡、熔断降级等核心难题,赢得了全球数百万开发者的青睐。
十年后的今天,在 2025.1.0 版本中,这位“王者”展现出了截然不同的姿态。

减法清单:哪些功能被“边缘化”了?
Spring Cloud 2025.1.0 最引人注目的特点并非新增了什么,而是它选择“舍弃”了什么。
| 组件/功能 |
之前地位 |
2025.1.0 状态 |
替代方案 |
| Gateway 统一构件 |
唯一官方网关 |
废弃并拆分 |
WebFlux 版本 或 MVC 版本 |
| OpenFeign |
推荐的标准HTTP客户端 |
降级为“兼容性适配器” |
@HttpExchange (Spring Framework 原生) |
| Spring Cloud CircuitBreaker |
集成第三方库的抽象层 |
核心实现转向维护模式 |
基于 Spring Framework 7 原生容错性抽象 |
| Reactive Kafka Binder |
高性能流处理方案 |
被完全移除 |
标准 Kafka Binder + 虚拟线程 |
- Gateway 的被迫拆分:原先唯一的
spring-cloud-starter-gateway 构件被废弃,强制拆分为针对 WebFlux 和 MVC 的两个独立版本。开发者现在必须明确选择技术栈(响应式或 Servlet)。
- OpenFeign 的光环褪去:这个曾经最受欢迎的声明式 HTTP 客户端,在官方文档中被标注为“兼容性适配器”。新项目不再推荐使用 OpenFeign,转而鼓励采用 Spring Framework 6 引入的原生
@HttpExchange 注解。
- 容错性回归核心:Spring Cloud CircuitBreaker 5.0.0 的核心实现不再依赖 Resilience4j、Sentinel 等第三方库,而是直接构建在 Spring Framework 7 新引入的原生熔断抽象之上。
- Reactive Kafka 退出舞台:在虚拟线程时代,Spring 团队认为曾经代表高性能的 Reactive Kafka Binder 已无必要,标准的 Kafka Binder 配合虚拟线程足以提供高效的并发处理能力,因此该模块被彻底移除。
强化虚拟线程支持:范式转移的驱动力
要理解这些变化,必须先理解Java 21 虚拟线程带来的范式转移。
过去,为了在高并发下避免阻塞宝贵的操作系统内核线程,开发者不得不转向复杂的 Reactive(响应式)编程模型。而虚拟线程的出现,将 Java 线程与操作系统内核线程解耦,使得阻塞操作不再消耗稀缺的内核资源。开发者可以用更直观、更易写的同步代码,获得接近 Reactive 的性能表现。
// 过去:通常需要 WebFlux 响应式编程来实现高并发
@RestController
public class OrderController {
public Mono<Order> getOrder(String id) {
return orderService.findById(id)
.flatMap(order -> userService.findById(order.getUserId())
.map(user -> enrichOrderWithUser(order, user)));
}
}
// 现在:传统的 MVC 模型配合虚拟线程就足够了
@RestController
public class OrderController {
public Order getOrder(String id) {
Order order = orderService.findById(id); // 阻塞调用,但使用的是虚拟线程
User user = userService.findById(order.getUserId());
return enrichOrderWithUser(order, user);
}
}
虚拟线程的普及,直接动摇了 Spring Cloud 部分组件的存在基础。
最明显的影响就是 Spring Cloud Gateway 5.0.0 的拆分。为了应对虚拟线程带来的技术栈选择变化,Gateway 团队将其拆分为两个版本:
| 旧构件 |
新构件 |
技术栈 |
适用场景 |
spring-cloud-starter-gateway |
spring-cloud-starter-gateway-server-webflux |
Reactive / Netty |
维持现有非阻塞架构的项目 |
| (无) |
spring-cloud-starter-gateway-server-webmvc |
Servlet / Tomcat |
希望利用虚拟线程实现高并发的项目 |
同样,Reactive Kafka Binder 也失去了其核心价值。尽管它曾因非阻塞和背压机制被视为高端方案,但其复杂性一直令人望而却步。虚拟线程让传统的阻塞式 Kafka 客户端也能轻松应对高并发场景,因此 Spring Cloud Stream 5.0.0 果断移除了该模块,体现了实用至上的理念。
Spring Framework 7 的功能内置:更深层的“替代”
虚拟线程的影响是表层的,更深层的挑战在于:Spring Cloud 的许多核心功能正被 Spring Framework 7 原生实现所取代。
容错性成为框架一等公民
在微服务架构中,重试、超时、熔断、限流等容错能力至关重要。过去,这些能力由 Hystrix、Resilience4j、Sentinel 等第三方库提供,Spring Cloud CircuitBreaker 作为抽象层来整合它们,这是 Spring Cloud 的核心价值之一。
然而,Spring Framework 7 将容错性提升为框架的内置一等公民功能。因此,Spring Cloud CircuitBreaker 5.0.0 转而基于 Framework 7 的原生抽象进行构建,其对第三方库的依赖和整合角色被大幅弱化。
OpenFeign 的“终结者”:@HttpExchange
Spring Framework 6 引入了 @HttpExchange 注解,允许通过接口声明 HTTP 客户端,其理念与 OpenFeign 相同。起初它功能尚弱,但转折点出现在 Spring Cloud Commons 5.0.0。在此版本中,@HttpExchange 补齐了微服务场景的最后一块拼图:自动集成服务发现、负载均衡与断路器。
// 过去:必须使用 OpenFeign
@FeignClient(name = "order-service")
public interface OrderClient {
@GetMapping("/orders/{id}")
Order getOrder(@PathVariable("id") String id);
}
// 现在:推荐使用 Spring Framework 原生的 @HttpExchange
@HttpExchange("/orders")
public interface OrderClient {
@GetExchange("/{id}")
Order getOrder(@PathVariable("id") String id);
}
在 2025.1.0 环境中,只要项目依赖了服务发现客户端(如 Eureka),使用 @HttpExchange 的接口就会自动具备服务发现、负载均衡和熔断保护能力。这带来了巨大优势:无需额外引入 OpenFeign 依赖、性能更优(减少反射代理层)、对 GraalVM 原生镜像更友好。
相比之下,Spring Cloud OpenFeign 5.0.0 的更新在官方博客中仅被一笔带过,其角色已从“首选方案”明确转变为“兼容性适配器”,主要为存量系统提供过渡支持。
感悟:轻量化是云原生与AI时代的必然选择
这次“做减法”的版本更新,看似是功能的收缩,实则是战略的聚焦和进化。
在云原生和 AI 辅助编程的时代,这种转变显得尤为必要。随着容器化、Serverless 的普及,以及 AI 编程工具(如 Cursor、Claude Code)将开发效率提升数倍,基础设施的敏捷性变得空前重要。
- 冷启动速度成为关键:在快速迭代的开发节奏下,漫长的应用启动时间令人难以忍受。
- 依赖简约化为优势:轻量级的项目结构更容易被 AI 理解和重构,也更有利于构建 GraalVM 原生镜像,实现秒级启动。
- 核心能力内聚:将容错、HTTP客户端等能力下沉到 Spring Framework 核心,减少了冗余的抽象层,使架构更清晰、更高效。
因此,Spring Cloud 2025.1 (Oakwood) 的“减法”,实际上是为适应新时代而进行的“健身”。它卸下了历史包袱,更加紧密地拥抱Spring Boot 4.0 和 Java 21 带来的现代特性(虚拟线程、记录类、模式匹配等),旨在为开发者提供一套更轻量、更快速、更符合未来趋势的微服务工具集。这或许意味着,那个大而全的“全家桶”时代正在过去,一个更专注、更敏捷的 Spring Cloud 新阶段已经开启。

对于开发者而言,理解这次变革背后的技术驱动因素,比单纯记忆版本变更列表更为重要。无论是拥抱 @HttpExchange 和虚拟线程,还是评估 Gateway 的技术栈选择,都是适应这次范式转移的关键步骤。欢迎在云栈社区与其他开发者继续探讨 Spring Cloud 演进路上的实践与思考。