Spring batch批处理框架

  

<强> spring batch框架的简介

  

批处理任务是大多数它项目的一个重要组成部分,批处理在业务系统中负责处理海量的数据,无须人工干预就能够自动高效的进行复杂的数据分析和处理。批处理会定期读入批量数据,经过相应的业务处理进行归档的业务操作,批处理的特征是自动执行,处理的数据量大,定时执行。将整个批处理的流程按逻辑划分可以分为读数据,处理数据和写数据。

  

春批对批处理本身的特性进行了抽象,将批处理作业抽象为工作和工作步骤,将批处理的处理过程分解为数据读,数据处理和数据写。

  

将异常处理机制分为跳过,重启和重试。将作业的分区分为多线程,并行远程和分区。

  

spring batch不是一个调度框架,但需要调度框架来配合完成批处理任务,它只关注批处理相关的任务问题,但没有提供相应的调度功能,如果需要使用调度功能,需要使用调度框架,这里介绍一个比较常用的调度框架石英,可以配合spring batch完成批处理的任务调度。

  

spring batch的架构分为三层:基础架构层,核心层和应用层。应用层包含所有的批处理作业,核心层主要提供JobLauncher,工作和步骤,基础架构层主要提供通用的读(ItemReader),写(ItemWriter)和服务处理(如:RetryTemplate重试模板;RepeatTemplate:重复模板),春天

  

批的三层架构体系使得Spring batch框架可以在不同的层级进行扩展,避免不同层级之间的相互影响。

  

<强>工作的介绍

  

批处理的作业是由一组步骤组成,同时工作本身也是配置文件的顶级元素。每个作业都有自己的名字,可以定义一步的执行顺序,以及定义作业是否可以重启.job执行的时候会生成一个工作实例(作业实例)和一个作业执行(作业执行器).job实例包含执行工作期间产生的数据以及工作执行的状态信息;1个工作可以对应多个工作实例,1个工作实例可以对应多个工作执行。

  

工作的配置的主要属性有id(作业的唯一标识),job-repository(定义作业仓库),增量器(作业参数递增器),可重新开始的(作业是否重启),父母(指定该作业的父作业),摘要(定义作业是否抽象)。

  

<强>步骤的介绍

  

步骤表示作业中一个完整的步骤,一个工作可以由一个或者多个步骤组成,一步主要负责批处理运行过程中的主要业务逻辑的实现。每次步骤执行的时候会生成一个或者多个工作执行,每次任务执行失败的时候,等到下次重新执行该任务的时候就会为该任务的步骤重新生成一个步骤执行。

  

步骤可以配置微,分区,工作,流。

  

一步一般主要配置itemReader, itemProcess和itemWriter来完成批处理的业务逻辑处理。

  

<强>工作存储库的介绍

  

工作库主要用来存储工作运行期间的元数据(这些元数据包括工作实例,工作执行、工作参数、步骤执行,执行上下文等数据)。

  

spring batch框架进行元数据管理的时候共有9张表,其中有3张表(后缀是SEQ)用来分配主键的,这9张表分别是

  

BATCH_JOB_INSTANCE:作业实例表

  

BATCH_JOB_EXECUTION:作业执行器表

  

BATCH_JOB_EXECUTION_PARAMS:作业参数表

  

BATCH_STEP_EXECUTION:作业步执行器表

  

BATCH_JOB_EXECUTION_CONTEXT:作业执行上下文表

  

BATCH_STEP_EXECUTION_CONTEXT:作业步执行上下文表

  

BATCH_JOB_EXECUTION_SEQ:作业执行器序列表

  

BATCH_STEP_EXECUTION_SEQ:作业步序列表

  

BATCH_JOB_SEQ:作业序列表

  

<强> itemReader的介绍

  

itemReader是步骤中对资源的读处理,Spring batch框架提供了大量的直接可用的读组件可以快速的完成批处理应用的开发和构建,同时框架也提供了较好的复用和扩展组件,开发者可以自定义实现。

  

ListItemReader:读取列表数据,只能读一次。

  

ItemReaderAdapter: ItemReader适配器,可以复用现有的读操作。

  

FlatFileItemReader:读平类型文件。

  

StaxEventItemReader:读XML类型文件。

  

JdbcCursorItemReader:基于JDBC游标方式读数据库。

  

HibernateCursorItemReader:基于hibernate游标方式读取数据库。

  

StoredProcedureItemReader:基于存储过程读取数据库。

  

IbatisPagingItemReader:基于Ibatis分页读取数据库。

  

JpaPagingItemReader:基于jpa方式分页读取数据库。

  

JdbcPagingItemReader:基于jdbc方式分页读取数据库。

  

Spring batch批处理框架