Spring Batch 简介
企业领域中的许多应用程序需要批量处理来在关键任务环境中执行业务操作。这些业务操作包括:
-
自动化、复杂的大规模信息处理,这些信息最适合在无需用户交互的情况下进行处理。这些操作通常包括基于时间的事件(例如月末计算、通知或通信)。
-
对非常庞大的数据集反复应用复杂的业务规则(例如,保险福利确定或费率调整)。
-
从内部和外部系统接收的信息集成,通常需要以事务方式对这些信息进行格式化、验证和处理,并将其录入记录系统。批处理每天为企业处理数十亿笔交易。
Spring Batch 是一个轻量级、全面的批处理框架,旨在实现健壮的批处理应用程序的开发,这些应用程序对于企业系统的日常运营至关重要。Spring Batch 基于人们所期望的 Spring 框架的特性(如生产力、基于 POJO 的开发方法以及总体易用性),同时使开发人员在需要时可以轻松访问和使用更高级的企业服务。Spring Batch 不是一个调度框架。商业领域和开源领域中已经有许多优秀的调度工具(例如 Quartz、Tivoli、Control-M 等)。Spring Batch 打算与调度器协同工作,而不是取代调度器。
Spring Batch 提供了处理大量记录所必需的可重用功能,包括日志记录和跟踪、事务管理、作业处理统计、作业重启、跳过和资源管理。它还提供了更高级的技术服务和功能,通过优化和分区技术实现极高容量和高性能的批处理作业。您可以在简单场景中使用 Spring Batch(例如将文件读取到数据库或运行存储过程),也可以在复杂、高容量场景中使用(例如在数据库之间移动大量数据、转换数据等)。高容量批处理作业可以以高度可扩展的方式使用该框架来处理大量的信息。
背景
虽然开源软件项目及其相关社区更加关注基于Web和微服务的架构框架,但对于企业IT环境中仍然存在的批处理需求,却缺乏对可重用架构框架的关注。由于缺乏标准的、可重用的批处理架构,导致在客户企业IT部门中出现了许多一次性、内部开发的解决方案。
SpringSource(现为 VMware)与 Accenture 合作以改变这一现状。Accenture 在实施批处理架构方面具备实践的行业和技术经验,SpringSource 拥有深厚的技术经验,而 Spring 业已验证的编程模型共同构成了一个自然且强大的合作伙伴关系,旨在创建高质量、市场相关的软件,填补企业 Java 中的一个重要空白。两家公司与许多客户合作,这些客户通过开发基于 Spring 的批处理架构解决方案来解决类似的问题。这些输入提供了一些有用的额外细节和现实世界的约束条件,有助于确保该解决方案能够应用于客户提出的实际问题。
埃森哲将其之前专有的批处理架构框架贡献给了Spring Batch项目,并提供了提交者资源以推动支持、增强功能和现有的特性集。埃森哲的贡献基于数十年构建批处理架构的经验,涵盖了最近几代平台:主机上的COBOL、Unix上的C++,以及现在任何地方的Java。
埃森哲 (Accenture) 与 SpringSource 的合作旨在促进软件处理方法、框架和工具的标准化,企业用户在创建批处理应用程序时可以一致地使用这些工具。希望为其企业 IT 环境提供标准且经过验证的解决方案的公司和政府机构可以从 Spring Batch 中受益。
使用场景
一个典型的批处理程序通常:
-
从数据库、文件或队列中读取大量记录。
-
以某种方式处理数据。
-
以修改后的形式写回数据。
Spring Batch 自动化了这种基本的批处理迭代,提供了将相似的事务作为一组进行处理的能力,通常是在没有用户交互的离线环境中进行。批处理作业是大多数 IT 项目的一部分,而 Spring Batch 是唯一提供强大、企业级解决方案的开源框架。
业务场景
Spring Batch 支持以下业务场景:
-
定期提交批处理过程。
-
并行批处理:作业的并行处理。
-
分阶段的企业消息驱动处理。
-
大规模并行批处理。
-
手动或失败后的计划重启。
-
依赖步骤的顺序处理(扩展到工作流驱动的批处理)。
-
部分处理:跳过记录(例如,在回滚时)。
-
整批事务处理,适用于批处理规模较小或已有存储过程或脚本的情况。
技术目标
Spring Batch 有以下技术目标:
-
让批处理开发人员使用 Spring 编程模型:专注于业务逻辑,让框架来处理基础设施。
-
在基础设施、批处理执行环境和批处理应用程序之间提供清晰的关注点分离。
-
提供通用的核心执行服务接口,所有项目都可以实现这些接口。
-
提供核心执行接口的简单和默认实现,可以“开箱即用”。
-
通过在所有层中使用 Spring 框架,使配置、自定义和扩展服务变得容易。
-
所有现有的核心服务都应该易于替换或扩展,而不会对基础设施层产生任何影响。
-
提供一个简单的部署模型,架构 JAR 文件与应用程序完全分离,并通过 Maven 构建。