Spring Batch 简介

企业领域中的许多应用程序都需要批量处理,以便在关键任务环境中执行业务操作。这些业务操作包括

  • 对大量信息的自动化、复杂处理,这些信息最有效地处理方式是在没有用户交互的情况下进行。这些操作通常包括基于时间的事件(例如月末计算、通知或信函)。

  • 对大型数据集重复应用复杂的业务规则(例如,保险福利确定或费率调整)。

  • 集成来自内部和外部系统的通常需要格式化、验证和以事务方式处理的信息到记录系统中。批量处理用于每天为企业处理数十亿笔交易。

Spring Batch 是一款轻量级、全面的批处理框架,旨在支持开发企业系统日常运营必不可少的健壮批处理应用程序。Spring Batch 基于人们对 Spring 框架的期望(生产力、基于 POJO 的开发方法和总体易用性)构建,同时使开发人员能够轻松访问和使用更高级的企业服务(如有必要)。Spring Batch 不是一个调度框架。在商业和开源领域中,有许多优秀的企业调度程序(如 Quartz、Tivoli、Control-M 等)可用。Spring Batch 旨在与调度程序协同工作,而不是取代调度程序。

Spring Batch 提供了在处理大量记录时必不可少的可重用功能,包括日志记录和跟踪、事务管理、作业处理统计信息、作业重启、跳过和资源管理。它还提供更高级的技术服务和功能,通过优化和分区技术支持超高容量和高性能批处理作业。您可以在简单的用例(例如将文件读入数据库或运行存储过程)和复杂的、高容量用例(例如在数据库之间移动大量数据、转换数据等)中使用 Spring Batch。高容量批处理作业可以以高度可扩展的方式使用该框架来处理大量信息。

背景

虽然开源软件项目及其相关社区越来越关注基于 Web 和微服务的架构框架,但对于满足基于 Java 的批处理需求的可重用架构框架,却鲜有关注,尽管企业 IT 环境中仍然需要处理此类处理。缺乏标准的可重用批处理架构导致了企业 IT 部门内部开发了许多一次性的内部解决方案。

SpringSource(现为 VMware)和埃森哲合作改变了这种情况。埃森哲在实施批处理架构方面的实践经验,SpringSource 深厚的技术经验以及 Spring 经过验证的编程模型共同构成了一个自然而强大的合作伙伴关系,旨在创建高质量、与市场相关的软件,以填补企业 Java 中的重要空白。两家公司都与许多客户合作,这些客户通过开发基于 Spring 的批处理架构解决方案来解决类似的问题。这些投入提供了一些有用的额外细节和现实生活中的约束条件,有助于确保该解决方案可以应用于客户提出的现实世界问题。

埃森哲将以前专有的批处理架构框架贡献给了 Spring Batch 项目,并提供了提交者资源来推动支持、增强功能和现有功能集。埃森哲的贡献基于其在使用几代平台构建批处理架构方面的数十年的经验:大型机上的 COBOL、Unix 上的 C++,以及现在的 Java 无处不在。

埃森哲和 SpringSource 之间的合作旨在促进软件处理方法、框架和工具的标准化,企业用户在创建批处理应用程序时可以始终如一地使用这些方法、框架和工具。希望为其企业 IT 环境提供标准、经过验证的解决方案的公司和政府机构可以从 Spring Batch 中受益。

使用场景

典型的批处理程序通常

  • 从数据库、文件或队列中读取大量记录。

  • 以某种方式处理数据。

  • 以修改后的形式写回数据。

Spring Batch 自动执行这种基本的批处理迭代,提供以集合方式处理类似事务的能力,通常在没有用户交互的脱机环境中。批处理作业是大多数 IT 项目的一部分,Spring Batch 是唯一提供强大、企业级解决方案的开源框架。

业务场景

Spring Batch 支持以下业务场景

  • 定期提交批处理过程。

  • 并发批处理:并行处理作业。

  • 分阶段的企业消息驱动处理。

  • 大规模并行批处理。

  • 故障后手动或计划重启。

  • 顺序处理依赖步骤(以及对工作流驱动的批处理的扩展)。

  • 部分处理:跳过记录(例如,在回滚时)。

  • 整个批处理事务,适用于批处理大小较小或现有存储过程或脚本的情况。

技术目标

Spring Batch 具有以下技术目标

  • 让批处理开发人员使用 Spring 编程模型:专注于业务逻辑,让框架负责基础设施。

  • 在基础设施、批处理执行环境和批处理应用程序之间提供清晰的分层。

  • 提供所有项目都可以实现的通用核心执行服务接口。

  • 提供核心执行接口的简单默认实现,可以“开箱即用”。

  • 通过在所有层使用 Spring 框架,简化服务的配置、定制和扩展。

  • 所有现有的核心服务都应该易于替换或扩展,而不会对基础设施层产生任何影响。

  • 提供简单的部署模型,使用 Maven 构建的架构 JAR 与应用程序完全分离。