Spring batch批处理框架

发布时间 - 2026-01-11 00:29:46    点击率:

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  # 批处理  # batch批处理  # Spring Batch轻量级批处理框架实战  # 详解批处理框架之Spring Batch  # Java中批处理框架spring batch详细介绍  # Spring Batch批处理框架使用解析  # 详解Spring Batch 轻量级批处理框架实践  # Spring Batch批处理框架操作指南  # 多个  # 分页  # 复用  # 自己的  # 重启  # 执行器  # 较好  # 自定义  # 中对  # 跳过  # 发送邮件  # 重试  # 应用层  # 就会  # 都有  # 在这  # 是由  # 数据管理  # 数据处理 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么导出Excel文件_Laravel Excel插件使用教程  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  如何在Windows服务器上快速搭建网站?  浅谈Javascript中的Label语句  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  如何快速生成可下载的建站源码工具?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  Laravel如何实现多对多模型关联?(Eloquent教程)  如何快速上传自定义模板至建站之星?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  如何在万网自助建站平台快速创建网站?  如何在云主机上快速搭建网站?  如何撰写建站申请书?关键要点有哪些?  如何快速搭建虚拟主机网站?新手必看指南  北京专业网站制作设计师招聘,北京白云观官方网站?  如何挑选高效建站主机与优质域名?  lovemo网页版地址 lovemo官网手机登录  详解vue.js组件化开发实践  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  如何在 Pandas 中基于一列条件计算另一列的分组均值  怎么用AI帮你设计一套个性化的手机App图标?  如何快速搭建高效服务器建站系统?  Laravel如何使用Vite进行前端资源打包?(配置示例)  如何在阿里云高效完成企业建站全流程?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  深圳网站制作平台,深圳市做网站好的公司有哪些?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  Python3.6正式版新特性预览  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  如何在云指建站中生成FTP站点?  Laravel如何使用Blade模板引擎?(完整语法和示例)  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  php json中文编码为null的解决办法  使用豆包 AI 辅助进行简单网页 HTML 结构设计  焦点电影公司作品,电影焦点结局是什么?  中国移动官方网站首页入口 中国移动官网网页登录  如何在服务器上三步完成建站并提升流量?  黑客如何通过漏洞一步步攻陷网站服务器?  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  JavaScript中的标签模板是什么_它如何扩展字符串功能  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  大同网页,大同瑞慈医院官网?  JavaScript常见的五种数组去重的方式  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  微信小程序 canvas开发实例及注意事项