跑批利器--SpringBatch框架
Spring Batch的框架包括启动批处理作业的组件和存储Job执行产生的元数据。如果你作为一个批处理应用程序的开发人员,你暂时没有必要跟这些组件打交道,因为它们主要为我们提供组件支持的角色,但是您需要配置这个基础框架在你的批处理应用程序中。
启动Jobs并存储Job元数据.
Spring Batch框架本身还是比较复杂的,但是我们开始接触它的时候主要是处理两个组件:Job
Launcher和Job Repository.这两个概念对应着的java接口分别是:JobLauncher和 JobRepository.
JobLauncher
对于Spring Batch这个框架里的小世界而言.JobLauncher是连接它跟外面世界的一个入口,具体SpringBatch如何跟外界进行交互,文章结尾会进行简单的说明.相对而言JobLauncher接口还是比较简单的,如下:
packageorg.springframework.batch.core.launch;
publicinterface JobLauncher {publicJobExecution run(Job job, JobParameters jobParameters)throwsJobExecutionAlreadyRunningException,JobRestartException,JobInstanceAlreadyCompleteException,JobParametersInvalidException;}
JobLauncher接口接受两个参数:Job和JobParameters.那么谁来调用这个Job
Launcher呢?当然,我们首先可以通过java程序来通过JobLauncher来启动,也可以通过定时任务例如Quartz
scheduler来启动.
JobRepository
JobRepository保持着所有Job执行的相关元数据,JobRepository的java接口如下:
packageorg.springframework.batch.core.repository;
publicinterface JobRepository {booleanisJobInstanceExists(String jobName, JobParameters jobParameters);JobExecutioncreateJobExecution(StringjobName, JobParameters jobParameters)throwsJobExecutionAlreadyRunningException, JobRestartException,JobInstanceAlreadyCompleteException;voidupdate(JobExecution jobExecution);voidadd(StepExecution stepExecution);voidupdate(StepExecution stepExecution);voidupdateExecutionContext(StepExecution stepExecution);voidupdateExecutionContext(JobExecution jobExecution);StepExecutiongetLastStepExecution(JobInstance jobInstance,StringstepName);intgetStepExecutionCount(JobInstance jobInstance, String stepName);JobExecutiongetLastJobExecution(String jobName,JobParametersjobParameters);}
JobResponseitory接口提供所有的服务来管理批量任务的生命周期,包括创建,更新等等.一般而言job启动器会把job的创建任务委托给Job
Repository来做,同时job也会在它执行的过程中来让Job
Repository存储它当然的状态.
下面我们来看看Spring Batch是如何跟外部系统进行交互的,先看一下下图.
一个批量应用程序并不是一个孤岛,它也需要跟外面的世界比如一些企业项目进行交互,上图基本上涵盖了它的交互内容.
一个job的启动通常是一个事件来进行触发的,我们会经常用到JobLauncher接口和JobParameters类,但是这个事件是可以来自任何地方的,例如一个系统的定时器;一个http请求到web控制器来启动job等这就是Spring
Batch 和外界的介入点.
另外批量Job程序基本上都是用来处理各种数据的,所以上图中我们可以看到SpringBatch的出口都是在跟数据源进行打交道,这些数据源可以是任何类型,但是文件系统和数据库是最常用的,当然它也可以支持写消息给JMS.
到目前为止我们已经了解SpringBatch的核心组件以及他们如何跟外部世界进行交互.
作者:架构师springboot
链接:https://www.jianshu.com/p/adc5b88b8f26
共同学习,写下你的评论
评论加载中...
作者其他优质文章