spring-integration v7.0.0¶
为什么要使用 Spring Integration¶
想象一下这个场景:你的应用是一座繁忙的国际机场,而各种数据、消息和事件是来自世界各地的航班。起初,只有几条航线,你手动调度尚可应付。但随着业务爆炸式增长——订单来了、支付响了、物流动了、通知发了——你的机场瞬间被数百架不同公司、不同机型的飞机挤满,它们讲着不同的协议(HTTP、JMS、FTP、TCP),有着不同的目的地。你用一堆自定义的 if-else、临时消息队列和手工粘合代码勉强维持,但系统变得脆弱、笨重且难以维护,每一次新航线的开通(新需求)都像是一次危险的空中交通管制实验。
这就是现代企业应用集成的真实矛盾:业务需求要求你快速、灵活地连接一切,而技术复杂性却试图将你拖入混乱、耦合的泥潭。
Spring Integration 就是你一直在寻找的“空中交通控制系统”。它不生产“飞机”(业务逻辑),但为所有“飞机”的起降、滑行、中转提供了标准化、可预测且高可靠的通道。它优雅地解决了核心矛盾:通过一套声明式的、基于模式的企业集成范式,将你的注意力从“如何连接”的繁琐细节中解放出来,让你能重新专注于“连接什么”的业务价值。使用它,意味着选择秩序而非混沌,选择可维护的弹性而非脆弱的“能跑就行”。
Spring Integration 是什么¶
简单来说,Spring Integration 是 Spring 家族中的“连接器”与“路由器”。它扩展了 Spring 编程模型,为构建基于消息驱动的企业集成解决方案提供了一套强大的抽象。
其核心思想是**通过消息管道(Message Channel)将应用程序的不同组件连接起来**,让这些组件无需彼此直接调用,只需向管道发送或接收消息即可通信。它提供了大量的适配器(Adapter)来连接外部系统(如 HTTP、JMS、文件、数据库),以及丰富的处理器(Filter、Transformer、Router、Splitter 等)来在管道中对消息进行加工和路由。
你可以把它理解为企业内部的“神经系统”或“装配线”,它负责在复杂的系统环境中可靠地传输、转换和派发信息,让整个架构松耦合且易于扩展。
入门示例¶
真实场景:一个电商系统需要处理用户上传的订单批量文件(CSV格式)。流程是:监控指定目录 -> 读取新文件 -> 解析验证内容 -> 将有效订单数据存入数据库 -> 发送处理成功通知邮件。
开发示例(基于 Java DSL 配置):
import org.springframework.context.annotation.*;
import org.springframework.integration.config.*;
import org.springframework.integration.dsl.*;
import org.springframework.integration.file.dsl.*;
import java.io.File;
@Configuration
@EnableIntegration
public class FileProcessingIntegrationConfig {
@Bean
public IntegrationFlow fileProcessingFlow() {
return IntegrationFlows
// 1. 监控 /tmp/input 目录,每2秒轮询一次新文件
.from(Files.inboundAdapter(new File("/tmp/input"))
.patternFilter("*.csv"),
e -> e.poller(Pollers.fixedDelay(2000)))
// 2. 将文件内容转换为字符串
.transform(Files.toStringTransformer())
// 3. 将CSV字符串转换为订单对象列表(自定义转换器)
.transform(csvToOrderListTransformer())
// 4. 拆分列表,让每个订单作为独立消息继续处理
.split()
// 5. 过滤掉无效订单(自定义过滤器)
.filter(Order.class, Order::isValid)
// 6. 将订单数据存入数据库(自定义服务激活器)
.handle(orderService, "saveOrder")
// 7. 处理成功后,准备邮件通知内容
.transform(order -> "订单 " + ((Order) order).getId() + " 已成功处理。")
// 8. 发送邮件(此处简化,实际需配置邮件适配器)
.handle(mailService, "sendNotification")
.get();
}
// 此处省略了 csvToOrderListTransformer, orderService, mailService 等Bean的定义
}
这个流程清晰定义了数据从文件到最终通知的“旅程”,每个步骤职责单一,通过 Spring Integration 的管道连接,易于测试、修改和监控。
Spring Integration v7.0.0 版本更新了什么¶
Spring Integration 7.0.0 是一个重要的主版本更新。其主要变化包括:全面转向 Spring Framework 6.3 和 Java 21 基线,为现代 Java 开发铺平道路。它引入了对 Jakarta EE 10 的全面支持,并移除了长期废弃的 API 和组件,使代码库更精简。性能方面,它优化了消息传递核心并提供了对 Project Reactor 的更深入集成。此外,该版本升级了众多关键依赖(如 Reactor、AMQP、Kafka 客户端),并继续增强其 Kotlin DSL,为开发者提供了更现代化、更高效的集成开发体验。
更新日志¶
⭐ 新功能¶
🐞 错误修复¶
- 修复 CompositeExecutor 构造函数中不正确的空检查 #10575
- 修复 Redis[Clustered] 在解锁时出现 “CROSSSLOT Keys in request” 错误的问题 #10546
- 修复用于自动创建输入目录的 Files DSL #10525
📔 文档¶
- 通过 DSL 示例扩展邮件相关文档 #10572
🔨 依赖升级¶
- 将 org.springframework.ws:spring-ws-bom 从 5.0.0-SNAPSHOT 升级至 5.0.0 #10597
- 将 protobufVersion 从 4.33.0 升级至 4.33.1 #10577
- 将 tools.jackson:jackson-bom 从 3.0.1 升级至 3.0.2 #10562
- 将 tools.jackson:jackson-bom 从 3.0.0 升级至 3.0.1 #10527
- 将 graalvmVersion 从 25.0.0 升级至 25.0.1 #10526
总结¶
总而言之,这是一次典型的维护性更新,侧重于**修复已知缺陷、优化内部细节、完善使用文档并保持依赖版本的最新