欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 前端技术 > javascript >内容正文

javascript

springbatch批处理框架入门(二) -凯发k8官方网

发布时间:2025/1/21 javascript 19 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 springbatch批处理框架入门(二) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

这篇文章接上一篇springbatch批处理框架入门(一),继续讲解springbatch基础知识。

目录

springbatch 核心类介绍

 springbatch 核心类job

 springbatch 核心类step

 springbatch 核心类stepexecution

 springbatch 核心类executioncontext

 springbatch 核心类jobrepository

 springbatch 核心类joblauncher

 springbatch 核心类itemreader和itemwriter

 springbatch 核心类itemprocessor 

 springbatch 核心类chunk

 springbatch 监听器

 springbatch具体小例子(部分代码)


 

springbatch 核心类介绍

下图是我们要讲解spring batch几个核心类:

 springbatch 核心类job

job是封装整个批处理过程的一个概念。jobspring batch的体系当中是一个最顶层的抽象概念。

一个job是我们运行的基本单位,它内部由step组成。job本质上可以看成step的一个容器。一个job可以按照指定的逻辑顺序组合step,并提供了我们给所有step设置相同属性的方法,例如一些事件监听,跳过策略

spring batchsimplejob类的形式提供了job接口的默认简单实现,它在job之上创建了一些标准功能。一个使用java bean例子代码如下

@beanpublic job cafecatjob() {return jobbuilderfactory.get("cafecatjob").start(cafecatstep()).build();}

springbatch 核心类step

带有步骤的作业层次结构

 springbatch 核心类stepexecution

stepexecution表示一次执行step, 每次运行一个step时都会创建一个新的stepexecution,类似于jobexecution。 但是,某个步骤可能由于其之前的步骤失败而无法执行。 且仅当step实际启动时才会创建stepexecution

次step执行的实例由stepexecution类的对象表示。 每个stepexecution都包含对其相应步骤的引用以及jobexecution和事务相关的数据,例如提交和回滚计数以及开始和结束时间。 此外,每个步骤执行都包含一个executioncontext,其中包含开发人员需要在批处理运行中保留的任何数据,例如重新启动所需的统计信息或状态信息。

下面是一个从数据库当中截图的实例:

springbatch 核心类executioncontext

executioncontext即每一jobexecution和stepexecution 的执行环境。它包含一系列的键值对。我们可以用如下代码获取executioncontext

  • executioncontext stepcontext= stepexecution.getexecutioncontext();
  • executioncontext jobcontext = jobexecution.getexecutioncontext();

springbatch 核心类jobrepository

jobrepository是一个用于将上述job,step等概念进行持久化的一个类。 它同时给job和step以及下文会提到的joblauncher实现提供crud操作。 首次启动job时,将从repository中获取jobexecution,并且在执行批处理的过程中,stepexecution和jobexecution将被存储到repository当中

@enablebatchprocessing注解可以为jobrepository提供自动配置。

springbatch 核心类joblauncher

joblauncher这个接口的功能非常简单,它是用于启动指定了jobparametersjob,为什么这里要强调指定了jobparameter,原因其实我们在前面已经提到了,jobparameterjob一起才能组成一次job的执行。

springbatch 核心类itemreader和itemwriter

itemreader是一个读数据的接口, itemreader读完所有数据时,返回null表示后续操作数据已经读完。spring batch为itemreader提供了非常多的实现类。

itemwriter是一个写数据的接口,spring batchitemwriter提供了非常多的实现类。

  • 操作单个文件:flatfileitemreaderflatfileitemwriter
  • 操作多个文件:multiresourceitemreader multiresourceitemwriter
  • 操作数据库:jdbcpagingitemreader jdbcbatchitemwriter

          mybatispagingitemreader mybatisbatchitemwriter

  • 操作xml文件:staxeventitemreader staxeventitemwriter
  • 操作json文件:jsonitemreader jsonfileitemwriter

springbatch 核心类itemprocessor 

itemprocessor对项目的业务逻辑处理的一个抽象, 当itemreader读取到一条记录之后,itemwriter还未写入这条记录之前,i我们可以借助temprocessor提供一个处理业务逻辑的功能,并对数据进行相应操作。如果我们在itemprocessor发现一条数据不应该被写入,可以通过返回null来表示。

springbatch 核心类chunk

chunk处理流程如右图

一次batch的任务可能会有很多的数据读写操作,因此一条一条的处理并向数据库提交的话效率不会很高,因此spring batch提供了chunk这个概念,我们可以设定一个chunk size,spring batch 将一条一条处理数据,但不提交到数据库,只有当处理的数据数量达到chunk size设定的值得时候,才一起去commit。

 springbatch 监听器

spring batch提供了多种监听器listener,用于在任务处理过程中触发我们的逻辑代码。常用的监听器根据粒度从粗到细分别有:job级别的监听器jobexecutionlistener、step级别的监听器stepexecutionlistener、chunk监听器chunklistener、itemreader监听器itemreadlistener、itemwriter监听器itemwritelistener和itemprocessor监听器itemprocesslistener和skiplistener等。具体可以参考下表

监听器

具体说明

jobexecutionlistener

job开始之前(beforejob)和之后(aflerjob)触发

stepexecutionlistener

step开始之前(beforestep)和之后(afterstep)触发

chunklistener

chunk 开始之前(beforechunk),之后(afterchunk)和错误后(afterchunkerror)触发

itemreadlistener

read 开始之前(beforeread),之后(afterread)和错误后(onreaderror)触发

itemprocesslistener

processor 开始之前(beforeprocess),之后(afterprocess)和错误后(onprocesserror)触发

itemwritelistener

writer 开始之前(beforewrite),之后(afterwrite)和错误后(onwriteerror)触发

skiplistener

skip(reder)时候,skip(writer)时候,在 skip(processor)时候

 springbatch具体小例子(部分代码)

@configuration @enablebatchprocessing public class cafecatconfiguration {@autowiredprivate jobbuilderfactory jobbuilderfactory;@autowiredprivate stepbuilderfactory stepbuilderfactory;@autowiredprivate catprocessor catprocessor;@autowiredprivate sqlsessionfactory sqlsessionfactory;@beanpublic job cafecatjob() {return jobbuilderfactory.get("cafecatjob").start(cafecatstep()).build();}@beanpublic step cafecatstep() {return stepbuilderfactory.get("cafecatstep").chunk(10).reader(cafecatcommonfileitemreader()).processor(catprocessor).writer(catcommonmybatisitemwriter()).build();}@bean@stepscopepublic commonfileitemreader cafecatcommonfileitemreader() {return new commonfileitemreader<>(cafecat.class);}@bean@stepscopepublic commonmybatisitemwriter catcommonmybatisitemwriter() {return new commonmybatisitemwriter<>(sqlsessionfactory,cat.class.getsimplename());} }

详细代码请参考github上面:springbatch例子详细代码

总结

以上是凯发k8官方网为你收集整理的springbatch批处理框架入门(二)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

网站地图