当前位置: 首页 > article >正文

Spring Cloud 2025 正式发布啦

文章目录

  • 一、版本兼容性
  • 二、Spring Cloud Gateway 重大更新
    • 1、新增功能
      • 1.1 Function & Stream 处理器集成
      • 1.2 Bucket4j 限流器支持
    • 2、重要弃用
      • 2.1. WebClientRouting 基础设施
      • 2.2. 模块和启动器重命名
    • 3、破坏性变更
      • 3.1 X-Forwarded-* 头部默认禁用
      • 3.2 配置受信任代理:
      • 3.3 安全影响:
  • 三、Spring Cloud Config 增强
    • AWS S3 YAML Profile 支持
  • 四、Spring Cloud Kubernetes 更新
    • 组合配置源支持
  • 五、Spring Cloud Circuitbreaker 新特性
    • 响应式隔离支持
  • 六、Spring Cloud Netflix 改进
    • Eureka 客户端增强
  • 七、版本更新清单
  • 八、升级指南
    • 1、前置条件
    • 2、升级步骤
      • 2.1. 更新 BOM 版本
      • 2.2. Gateway 模块迁移
      • 2.3. 配置属性迁移
      • 2.4. 安全配置更新
      • 2.5. Spring Cloud Alibaba 兼容性注意事项

Spring Cloud 2025.0.0 “Northfields” 于 2025年5月29日正式发布,完全兼容 Spring Boot 3.5.0。本版本在微服务架构的多个核心组件上进行了重要改进和功能增强。

一、版本兼容性

• Spring Boot: 3.5.0
• 发布代号: Northfields (按字母顺序命名传统)
• 主要变更: 包含破坏性变更,不支持平滑升级,细节请看这篇文章

二、Spring Cloud Gateway 重大更新

1、新增功能

1.1 Function & Stream 处理器集成

Gateway 现在原生支持 spring-cloud-function 和 spring-cloud-stream 处理器:

spring:cloud:gateway:routes:-id:function-routeuri:function://myFunctionpredicates:-Path=/api/process/**-id:stream-routeuri:stream://myStreamProcessorpredicates:- Path=/api/stream/**

技术优势:
• 支持函数式编程模型处理请求
• 集成消息驱动架构 (Kafka, RabbitMQ)
• 简化 Serverless 和事件驱动架构实现

1.2 Bucket4j 限流器支持

WebFlux 版本新增 Bucket4j 令牌桶算法支持:

spring:cloud:gateway:server:webflux:routes:-id:rate-limited-routeuri:http://backend-servicefilters:-name:Bucket4jRateLimitargs:capacity:100refill-rate:10refill-period: PT1S

2、重要弃用

2.1. WebClientRouting 基础设施

• 状态: 已弃用,5.0 版本将移除
• 影响: 依赖此基础设施的路由逻辑需要迁移
• 建议: 使用 Gateway 提供的标准路由机制

2.2. 模块和启动器重命名

为明确区分 Web 技术栈和工作模式,引入新的命名规范:

旧名称新名称说明
spring-cloud-gateway-serverspring-cloud-gateway-server-webfluxWebFlux 服务器模式
spring-cloud-gateway-server-mvcspring-cloud-gateway-server-webmvcWebMVC 服务器模式
spring-cloud-starter-gateway-serverspring-cloud-starter-gateway-server-webfluxWebFlux 启动器
spring-cloud-starter-gateway-server-mvcspring-cloud-starter-gateway-server-webmvcWebMVC 启动器
spring-cloud-gateway-mvcspring-cloud-gateway-proxyexchange-webmvcWebMVC 代理交换
spring-cloud-gateway-webfluxspring-cloud-gateway-proxyexchange-webfluxWebFlux 代理交换

3、破坏性变更

3.1 X-Forwarded-* 头部默认禁用

出于安全考虑,X-Forwarded-* 和 Forwarded 头部功能默认禁用。

3.2 配置受信任代理:

# WebFlux 版本
spring:
cloud:gateway:server:webflux:trusted-proxies:"192\\.168\\..*|10\\..*"# WebMVC 版本 (4.1.x+)
spring:
cloud:gateway:mvc:trusted-proxies: "192\\.168\\..*|10\\..*"

3.3 安全影响:

防止恶意伪造代理头部,需要显式配置信任边界。但如果下游业务有依赖此请求头,请及时处理。

三、Spring Cloud Config 增强

AWS S3 YAML Profile 支持

Config Server 现在支持从 S3 读取 profile 特定的 YAML 文件:

spring:cloud:config:server:awss3:bucket: my-config-bucketregion: us-west-2

文件结构示例:

s3://my-config-bucket/
├── application.yaml
├── application-dev.yaml
├── application-prod.yaml
└── application-test.yaml

Config Server 将根据激活的 profile 自动加载对应配置文件。

四、Spring Cloud Kubernetes 更新

组合配置源支持

Kubernetes ConfigMap 和 Secret 现在可作为组合配置源:

spring:cloud:kubernetes:config:sources:-name:app-confignamespace:default-name:db-secretnamespace:defaultexplicit-prefix: database

配置优先级:

  1. 命令行参数
  2. 系统属性
  3. Kubernetes ConfigMap/Secret
  4. application.yaml
  5. 默认值

五、Spring Cloud Circuitbreaker 新特性

响应式隔离支持

新增对响应式编程模式支持:

@Component
publicclassReactiveService {@Autowiredprivate ReactiveCircuitBreakerFactory circuitBreakerFactory;public Mono<String> callExternalService() {return circuitBreakerFactory.create("external-service").run(webClient.get().uri("/api/data").retrieve().bodyToMono(String.class),throwable -> Mono.just("fallback-response"));}
}

配置示例:

resilience4j:bulkhead:instances:external-service:max-concurrent-calls: 10max-wait-duration: 1000ms

六、Spring Cloud Netflix 改进

Eureka 客户端增强

支持 Apache HTTP Client 5 的 RequestConfig 定制:

@Bean
public EurekaClientHttpRequestFactorySupplier customRequestFactorySupplier() {return () -> {RequestConfigrequestConfig= RequestConfig.custom().setConnectTimeout(5000).setSocketTimeout(10000).setConnectionRequestTimeout(3000).build();returnnewHttpComponentsClientHttpRequestFactory(HttpClients.custom().setDefaultRequestConfig(requestConfig).build());};
}

七、版本更新清单

所有模块已更新至最新版本以确保与 Spring Boot 3.5.0 兼容:

模块名称版本
Spring Cloud Config4.3.0
Spring Cloud Gateway4.3.0
Spring Cloud Kubernetes3.3.0
Spring Cloud Circuitbreaker3.3.0
Spring Cloud Netflix4.3.0
Spring Cloud Build4.3.0
Spring Cloud Openfeign4.3.0
Spring Cloud Stream4.3.0
Spring Cloud Commons4.3.0
Spring Cloud Contract4.3.0
Spring Cloud Consul4.3.0
Spring Cloud Vault4.3.0
Spring Cloud Function4.3.0
Spring Cloud Bus4.3.0
Spring Cloud Zookeeper4.3.0
Spring Cloud Task3.3.0
Spring Cloud Starter Build2025.0.0

八、升级指南

1、前置条件

1.1. 升级 Spring Boot 至 3.5.0
1.2. Java 版本: 确保使用 Java 17+

2、升级步骤

2.1. 更新 BOM 版本

<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2025.0.0</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

2.2. Gateway 模块迁移

<!-- 旧依赖 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency><!-- 新依赖 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway-server-webflux</artifactId>
</dependency>

2.3. 配置属性迁移

# 旧配置
spring:
cloud:gateway:routes:-id:exampleuri:http://example.com# 新配置  
spring:
cloud:gateway:server:webflux:routes:-id:exampleuri: http://example.com

2.4. 安全配置更新

spring:cloud:gateway:server:webflux:trusted-proxies: "10\\..*|192\\.168\\..*"

2.5. Spring Cloud Alibaba 兼容性注意事项

如果您的项目集成了 Spring Cloud Alibaba 组件,需特别注意 Spring Cloud 2025.0.0 与 Spring Cloud Alibaba 2023.0.3 版本之间存在日志依赖冲突问题,可能导致应用启动失败。

解决方案:

  1. 可参考 PIG 微服务平台的解决方案 (https://gitee.com/log4j/pig/tree/jdk17-dev)
  2. 或通过显式排除冲突依赖并引入兼容版本
  3. 等待 Spring Cloud Alibaba 发布完全兼容的 2025.x 版本
http://www.lryc.cn/news/2402416.html

相关文章:

  • 一文速通Python并行计算:12 Python多进程编程-进程池Pool
  • 相机Camera日志分析之二十五:高通相机Camx 基于预览1帧的process_capture_request四级日志分析详解
  • React从基础入门到高级实战:React 实战项目 - 项目一:在线待办事项应用
  • 云部署实战:基于AWS EC2/Aliyun ECS与GitHub Actions的CI/CD全流程指南
  • golang 如何定义一种能够与自身类型值进行比较的Interface
  • Web前端之原生表格动态复杂合并行、Vue
  • 『uniapp』把接口的内容下载为txt本地保存 / 读取本地保存的txt文件内容(详细图文注释)
  • C/C++ 面试复习笔记(2)
  • 宝马集团推进数字化转型:强化生产物流与财务流程,全面引入SAP现代架构
  • 【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 时间事件处理部分)
  • 【DAY40】训练和测试的规范写法
  • C语言 标准I/O函数全面指南
  • el-select 实现分页加载,切换也数滚回到顶部,自定义高度
  • Langchaine4j 流式输出 (6)
  • Jenkins:自动化流水线的基石,开启 DevOps 新时代
  • 学习经验分享【40】目标检测热力图制作
  • C#里与嵌入式系统W5500网络通讯(3)
  • 用OpenNI2获取奥比中光Astra Pro输出的深度图(win,linux arm64 x64平台)
  • Unity VR/MR开发-VR设备与适用场景分析
  • Linux: network: switch:arp cache更新规则 [chatGPT]
  • Java网络编程API 1
  • Android协程学习
  • Angular报错:cann‘t bind to ngClass since it is‘t a known property of div
  • uniapp+vue3实现CK通信协议(基于jjc-tcpTools)
  • Python爬虫实战:研究urlparse库相关技术
  • 解锁FastAPI与MongoDB聚合管道的性能奥秘
  • 软件工程方法论:在确定性与不确定性的永恒之舞中寻找平衡
  • Unity中的MonoSingleton<T>与Singleton<T>
  • 怎么通过 jvmti 去 hook java 层函数
  • 兰亭妙微 | 医疗软件的界面设计能有多专业?