Spring Batch 集成
许多 Spring Batch 用户可能会遇到超出 Spring Batch 范围的需求,但这些需求可以通过使用 Spring Integration 高效且简洁地实现。反之,Spring Integration 用户也可能遇到 Spring Batch 的需求,并需要一种有效集成这两个框架的方法。在此背景下,出现了多种模式和用例,而 Spring Batch Integration 正是为了满足这些需求而设计的。
Spring Batch 与 Spring Integration 之间的界限并非总是清晰,但两条建议可以提供帮助:思考粒度问题并应用常见模式。本节将介绍其中一些常见模式。
为批处理添加消息传递功能,既能实现操作自动化,也能将关键关注点进行分离和策略化。例如,消息可以触发作业执行,而发送消息的方式可以多种多样。或者,当作业完成或失败时,该事件可能触发发送消息,而这些消息的消费者可能关注与应用程序本身无关的操作问题。消息传递也可以嵌入到作业中(例如,通过通道读取或写入待处理项)。远程分区和远程分块提供了将工作负载分配到多个工作节点的方法。
本节涵盖以下关键概念:
章节总结
📄️ 命名空间支持
Spring Batch Integration 在 1.3 版本中增加了专用的 XML 命名空间支持,旨在提供更简便的配置体验。要使用该命名空间,请将以下命名空间声明添加到您的 Spring XML 应用上下文文件中:
📄️ 通过消息启动批处理作业
在使用核心 Spring Batch API 启动批处理作业时,您基本上有两种选择:
📄️ 作业启动网关的可用属性
作业启动网关具有以下属性,您可以通过设置这些属性来控制作业:
📄️ 使用信息性消息提供反馈
由于Spring Batch作业可能运行时间较长,提供进度信息通常至关重要。例如,利益相关者可能希望在批处理作业的部分或全部失败时收到通知。Spring Batch通过以下方式支持此类信息的收集:
📄️ 异步处理器
异步处理器可帮助您扩展项目的处理能力。在异步处理器用例中,AsyncItemProcessor 充当调度器,在新线程上执行项目的 ItemProcessor 逻辑。项目完成后,Future 将传递给 AsyncItemWriter 进行写入。
📄️ 外部化批处理执行
到目前为止讨论的集成方法,提出了Spring Integration像外壳一样包裹Spring Batch的使用场景。然而,Spring Batch也可以在内部使用Spring Integration。通过这种方法,Spring Batch用户可以将项目(items)甚至数据块(chunks)的处理委托给外部进程。这使您能够卸载复杂的处理任务。Spring Batch Integration 专门为以下方面提供了支持: