一、SpringBatch是一个批处理的框架,作为一个Spring组件,提供了通过使用Spring的依赖注入来处理批处理的条件。

  什么是批处理呢?

在现代企业应用当中,面对复杂的业务以及海量的数据,除了通过庞杂的人机交互界面进行各种处理外,还有一类工作,不需要人工干预,只需要定期读入大批量数据,然后完成相应业务处理并进行归档。这类工作即为“批处理”。比如近期金融项目中的撮合功能,不需要人工干预,自动对借款人和出借人进行匹配撮合,完成借贷功能。

从上面的描述可以看出,批处理应用有如下几个特点:

    • 数据量大,少则百万,多则上亿的数量级。
    • 不需要人工干预,由系统根据配置自动完成。
    • 与时间相关,如每天执行一次或每月执行一次。

同时,批处理应用又明显分为三个环节:

    • 读数据,数据可能来自文件、数据库或消息队列等
    • 数据处理,如电信支撑系统的计费处理
    • 写数据,将输出结果写入文件、数据库或消息队列等

因此,从系统架构上,应重点考虑批处理应用的事务粒度、日志监控、执行、资源管理(尤其存在并发的情况下)。从系统设计上,应重点考虑数据读写与业务处理的解耦,提高复用性以及可测试性。

  二、SpringBatch的业务场景有:

  • 周期性的提交批处理
  • 把一个任务并行处理
  • 消息驱动应用分级处理
  • 大规模并行批处理
  • 手工或调度使用任务失败之后重新启动
  • 有依赖步骤的顺序执行(使用工作流驱动扩展)
  • 处理时跳过部分记录
  • 成批事务:为小批量的或有的存储过程/脚本的场景使用

  三、SpringBatch的架构图

  SpringBatch使用三层架构,三层分别为应用、核心和基础服务。

  SpringBatch的初步了解-LMLPHP

  细化的体系结构

  SpringBatch的初步了解-LMLPHP

  SpringBatch的初步了解-LMLPHP

  应用层:包含所有的批处理作业,通过Spring框架管理程序员自定义的代码。

  核心层:包含了Batch启动和控制所需要的核心类,如:JobLauncher、Job和step等。

  基础服务层:应用层和核心层建立在基础服务层即基础架构层智商,基础架构层提供共通的读(ItemReader)、写(ItemWriter)和服务(如RetryTemplate:重试模块,可以被应用层和核心层使用)。

  另外我们还需要知道,Spring Batch 是一款批处理应用框架,不是调度框架。它只关注批处理任务相关的问题,如事务、并发、监控、执行等,并不提供相应的调度功能。因此,如果我们希望批处理任务定期执行,可结合 Quartz 等成熟的调度框架实现。

05-11 21:54