Spring Batch学习汇总

0 摘要

本文整理自Spring Batch官方文档。

Spring Batch官方文档中,提供两种实例代码,XML和Java Config,默认选择Java Config。

1 Spring Batch 简介

1.1 Spring Batch

Spring Batch 是一个轻量级,全面的批处理框架,旨在开发对企业系统日常运营至关重要的强大批处理应用程序。Spring Batch 以Spring框架为基础,开发人员可以使用Spring框架的原有服务。

1.2 使用场景

通常一个典型的批处理程序如下:

  • Read:从数据库,文件或队列中读取大量记录。
  • Process:以某种方式处理数据。
  • Write:以修改的形式写回数据。

Spring Batch自动执行此基本批处理迭代,提供处理类似事务的功能,通常在脱机环境中处理,无需任何用户交互。批处理作业是大多数IT项目的一部分,Spring Batch是唯一提供强大的企业级解决方案的开源框架。

业务场景

  • 定期提交批处理
  • 并发批处理:并行处理作业
  • 分阶段的企业消息驱动处理
  • 大规模并行批处理
  • 失败后手动或预定重启
  • 依赖步骤的顺序处理(使用扩展的toworkflow驱动批次)
  • 部分处理:跳过记录(例如,回滚时)
  • 整批交易,适用于批量较小或现有存储过程/脚本的情况

技术目标

  • 批处理开发人员使用Spring编程模型:专注于业务逻辑,让框架负责基础架构。
  • 清楚地分离基础架构,批处理执行环境和批处理应用程序之间的关注点。
  • 提供通用的核心执行服务作为所有项目可以实现的接口。
  • 提供可以“开箱即用”使用的核心执行接口的简单和默认实现。
  • 通过在所有层中利用spring框架,易于配置,定制和扩展服务。
  • 所有现有核心服务都应易于更换或扩展,而不会对基础架构层产生任何影响。
  • 提供一个简单的部署模型,使用Maven构建的架构JAR与应用程序完全分离。

1.3 Spring Batch 架构

Spring Batch的设计具有可扩展性和多样化的最终用户群。下图显示了支持最终用户开发人员的可扩展性和易用性的分层体系结构。

Spring Batch Architecture

这种分层架构突出了三个主要的高级组件:应用程序,核心和基础架构。该应用程序包含开发人员使用Spring Batch编写的所有批处理作业和自定义代码。Batch Core包含启动和控制批处理作业所需的核心运行时类。它包括实现 JobLauncher,Job和Step。Application和Core都建立在通用基础架构之上。此基础结构包含常见的读取器和编写器和服务(例如RetryTemplate),应用程序开发人员(读取器和编写器,如ItemReader和ItemWriter)以及核心框架本身(重试,它是自己的库)都使用它们。

1.4 官方提供的构建策略

在开始设计批处理作业时,应将业务逻辑分解为一系列步骤,这些步骤可使用以下标准构建块实现:

  • 转换应用程序:对于由外部系统提供或生成的每种类型的文件,必须创建转换应用程序,以将提供的事务记录转换为处理所需的标准格式。

  • 验证应用程序:验证应用程序确保所有输入/输出记录正确且一致。

  • 提取应用程序:从数据库或输入文件中读取一组记录,根据预定义规则选择记录,并将记录写入输出文件的应用程序。

  • 提取/更新应用程序:从数据库或输入文件中读取记录,并对由每个输入记录中的数据驱动的数据库或输出文件进行更改的应用程序。

  • 处理和更新应用程序:从提取或验证应用程序对输入事务执行处理的应用程序。处理通常涉及读取数据库以获取处理所需的数据,可能更新数据库并创建输出处理的记录。

  • 输出/格式应用程序:读取输入文件的应用程序,根据标准格式从该记录重组数据,并生成用于打印或传输到另一个程序或系统的输出文件。

批量应用程序还可以按其输入源进行分类:

  • 数据库驱动的应用程序由从数据库检索的行或值驱动。
  • 文件驱动的应用程序由从文件中检索的记录或值驱动。
  • 消息驱动的应用程序由从消息队列中检索的消息驱动。

2 批处理的基本概念

下图是批量参考体系结构的简化版本,已使用了数十年。Spring Batch提供了健壮,可维护系统中常见的层,组件和技术服务的物理实现,这些系统用于解决简单到复杂批处理应用程序的创建问题,其基础结构和扩展可满足非常复杂的处理需求。

Batch SysArch

2.1 Job

在Spring Batch中,Job是Step实例的容器。

Job的配置包含:

  • 易于理解的名字
  • Step实例的定义和排序
  • 是否可重启

2.1.1 JobInstance

2.1.2 JobParameters

2.1.3 JobExecution

2.2 Step

2.3 ExecutionContext

2.4 JobRepository

2.5 JobLauncher

2.6 Item Reader

2.7 Item Writer

2.8 Item Processor

2.9 Batch Namespace

分享到: