当前位置: 首页 > 编程笔记 >

Spring batch批处理框架

唐修明
2023-03-14
本文向大家介绍Spring batch批处理框架,包括了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。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持小牛知识库!

 类似资料:
  • 我想用3个步骤建立一个批次。我想配置这个步骤,就像如果有100条记录,当step1读取、处理和写入一个10块时,step02,然后step03开始和结束,然后再次返回step1,读取下一个块。这在Spring批量可能吗?

  • 反正可以禁用SQL,我只是想测试我的读写器和处理器工作正常。

  • 本文向大家介绍Spring Batch批处理框架使用解析,包括了Spring Batch批处理框架使用解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Spring Batch批处理框架使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 使用Spring Batch做为批处理框架,可以完成常规的数据量不是特别大的离线计算。 现在

  • 批处理 本书展示的几个例子中,ElasticSearch提供了高效的批量索引数据的功能,用户只需按批量索引的格式组织数据即可。同时,ElasticSearch也为获取数据和搜索数据提供了批处理功能。值得一提的是,该功能使用方式与批量索引类似,只需把多个请求组合到一起,每个请求可以独立指定索引及索引类型。接下来了解这些功能。 MultiGetMultiGet操作允许用户通过_mget端点在单个请求命

  • 我有以下工作要处理在一定的时间间隔或特别的基础上。 作业中的步骤如下: 我也想要用户界面,在那里我可以触发一个特别的基础上的工作,而且我应该能够提供参数从用户界面。 我想用Spring batch来完成这个任务,但它更多的是用于读->处理->写之类的工作。这里,在第一步中,我正在生成由第二步读取的数据。我不确定我是否还可以使用Spring batch来实现这个,或者有更好的方法来实现这个。

  • 问题内容: 我遇到这样的情况,我想更新一些输入为复选框的数据,我在下面尝试了此代码。数据已保存在数据库中,但数据已保存在另一行中, 例如:我为BirdA选中了红色,黄色和灰色,同时为BirdD选中了黑色和蓝色。在数据库中,BirdA的颜色正确保存,但是第二只鸟的深色和蓝色保存在BirdB上( 应保存在BirdD上 ) 我想解决上面的问题,因此数据应保存在数据库中的正确位置。请在下面检查我的代码: