Spring batch批处理框架

Posted weiker12

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring batch批处理框架相关的知识,希望对你有一定的参考价值。

spring batch框架的简介

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

spring batch对批处理本身的特性进行了抽象,将批处理作业抽象为job和job step,将批处理的处理过程分解为数据读,数据处理和数据写。
将异常处理机制分为跳过,重启和重试。将作业的分区分为多线程,并行
远程和分区。

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

spring batch的架构分为三层:基础架构层,核心层和应用层。应用层包含所有的批处理作业,核心层主要提供JobLauncher、Job和step,基础架构层主要提供通用的读(ItemReader)、写(ItemWriter)和服务处理(如:RetryTemplate重试模板;RepeatTemplate:重复模板),Spring
batch的三层架构体系使得Spring batch框架可以在不同的层级进行扩展,避免不同层级之间的相互影响。


job的介绍

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

job的配置的主要属性有id(作业的唯一标识)、job-repository(定义作业仓库)、incrementer(作业参数递增器)、restartable(作业是否重启)、parent(指定该作业的父作业)、abstract(定义作业是否抽象)。


step的介绍

step表示作业中一个完整的步骤,一个job可以由一个或者多个step组成,step主要负责批处理运行过程中的主要业务逻辑的实现。每次step执行的时候会生成一个或者多个job execution,每次任务执行失败的时候,等到下次重新执行该任务的时候就会为该任务的step重新生成一个step execution。
step可以配置tasklet、partition、job、flow。
step一般主要配置itemReader、itemProcess和itemWriter来完成批处理的业务逻辑处理。


job repository的介绍

job repository主要用来存储job运行期间的元数据(这些元数据包括job instance、job execution、job parameters、step execution、execution context等数据)。
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是Step中对资源的读处理,Spring batch框架提供了大量的直接可用的读组件可以快速的完成批处理应用的开发和构建,同时框架也提供了较好的复用和扩展组件,开发者可以自定义实现。
ListItemReader:读取List数据,只能读一次。
ItemReaderAdapter:ItemReader适配器,可以复用现有的读操作。
FlatFileItemReader:读Flat类型文件。
StaxEventItemReader:读XML类型文件。
JdbcCursorItemReader:基于JDBC游标方式读数据库。
HibernateCursorItemReader:基于Hibernate游标方式读取数据库。
StoredProcedureItemReader:基于存储过程读取数据库。
IbatisPagingItemReader:基于Ibatis分页读取数据库。
JpaPagingItemReader:基于jpa方式分页读取数据库。
JdbcPagingItemReader:基于jdbc方式分页读取数据库。
HibernatePagingItemReader:基于Hibernate方式分页读取数据库。
JmsItemReader:读取jms队列。
IteratorItemReader:迭代方式的读组件。
MultiResourceItemReader:多文件读取组件。
MongoItemReader:基于分布式存储MongoDB读组件。
Neo4jItemReader:面向网格数据库Neo4j读组件。
ResourcesItemReader:基于批量资源的读组件。
AmqpItemReader:读取AMQP队列组件。
RepositoryItemReader:基于Spring Data的读组件。


itemProcess的介绍

itemProcess阶段表示对读取数据进行处理,开发者可以在这里面实现自己的业务操作。
CompositeItemProcessor:组合处理器,可以封装多个业务处理服务。
ItemProcessorAdapter:适配器,可以复用现有的业务处理服务。
PassThroughItemProcessor:不做业务处理,直接返回读取数据。
ValidatingItemProcessor:数据校验处理器,支持对数据的校验,如果校验不通过可以进行过滤或者跳过skip的方式来处理记录。


itemWriter的介绍

itemWriter是step中对资源的写处理,Spring batch框架提供了大量的直接可用的写组件可以快速的完成批处理应用的开发和构建,同时框架也提供了较好的复用和扩展组件,开发者可以自定义实现。
FlatFileItemWriter:写flat类型文件。
MultiResourceItemWriter:多文件写组件。
StaxEventItemWriter:写XML类型文件。
AmqpItemWriter:写AMQP类型消息。
ClassifierCompositeItemWriter:根据Classifier路由不同的Item到特定的ItemWriter处理。
HibernateItemWriter:基于Hibernate方式写数据库。
IbatisBatchItemWriter:基于Ibatis方式写数据库。
ItemWriterAdapter:适配器,可以复用现有的写服务。
JdbcBatchItemWriter:基于JDBC方式写数据库。
JmsItemWriter:写JMS队列。
JpaItemWriter:基于jpa方式写数据库。
GemfireItemWriter:基于分布式数据库Gemfire的写组件。
SpELMappingGemfireItemWriter:基于spring表达式语言写分布式数据库Gemfire的组件。
MimeMessageItemWriter:发送邮件的写组件。
MongoItemWriter:基于分布式文件存储数据库MongoDB写组件。
Neo4jItemWriter:面向网络数据库Neo4j的读组件。
PropertyExtractingDelegatingItemWriter:属性抽取代理写组件。
RepositoryItemWriter:基于Spring Data的写组件。
SimpleMailMessageItemWriter:发送邮件的写组件。
CompositeItemWriter:条目写的组合模式,支持组装多个ItemWriter。


以上是关于Spring batch批处理框架的主要内容,如果未能解决你的问题,请参考以下文章

Spring框架——批处理(batch)和事务(Transaction)

Spring 学习总结(34)——Spring Batch 批处理框架使用总结

Spring Batch 批处理框架,真心强

Spring Batch 批处理框架,真心强

Spring Batch 批处理框架,真心强

Spring Batch 批处理框架,真心强