javascript
springbatch批处理框架入门(二) -凯发k8官方网
这篇文章接上一篇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是封装整个批处理过程的一个概念。job在spring batch的体系当中是一个最顶层的抽象概念。
一个job是我们运行的基本单位,它内部由step组成。job本质上可以看成step的一个容器。一个job可以按照指定的逻辑顺序组合step,并提供了我们给所有step设置相同属性的方法,例如一些事件监听,跳过策略。
spring batch以simplejob类的形式提供了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这个接口的功能非常简单,它是用于启动指定了jobparameters的job,为什么这里要强调指定了jobparameter,原因其实我们在前面已经提到了,jobparameter和job一起才能组成一次job的执行。
springbatch 核心类itemreader和itemwriter
itemreader是一个读数据的接口, 当itemreader读完所有数据时,返回null表示后续操作数据已经读完。spring batch为itemreader提供了非常多的实现类。
itemwriter是一个写数据的接口,spring batch为itemwriter提供了非常多的实现类。
- 操作单个文件:flatfileitemreader 和 flatfileitemwriter
- 操作多个文件: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").详细代码请参考github上面:springbatch例子详细代码
总结
以上是凯发k8官方网为你收集整理的springbatch批处理框架入门(二)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: springbatch批处理框架入门(一
- 下一篇: springbatch接口batchco