JobRepository 和JobLauncher 是什么

169 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第26天,点击查看活动详情

这篇文章我们来说明一些JobRepository 和JobLauncher。

什么是 JobRepository

在看这篇文章的前提是你已经对Spring Batch 的概念以及Spring Batch 中的job 和step 有了基础的了解。

对于JobRepository 来说,它其实就是一个用于将job 和step 这些概念进行封装以及持久化的一个类。我们看这个名字,就可以猜出一些它的概念,它就是一个Job 的仓库。它可以给Job 和Step 以及JobLauncher 提供增删改查的操作。

Spring Batch 在第一次启动某个Job 的时候,将会从JobRepository 中获取JobInstance / JobExecution,同时在执行批处理的过程中会产生JobExecution 以及StepExecution,这些内容都会被存储到JobRepository 之中。

所以说,看过这个介绍之后,我们对JobRepository 也有比较明确的了解了。同时,我们对JobRepository/Job/JobInstance/JobParameters/JobExecution 的关系也有了一个清晰的认识,这里总结一下:

JobInstance 是Job 的一个运行实例,会存储在JobRepository 中,在启动后,Spring Batch 会从JobRepository 中获取;每一个不同的JobInstance 都是由JobParameters 来区分的;以相同的JobParameters 运行的多次JobInstance 会对应多个JobExecution。

接下来我们来看一下JobLauncher 的定义。

JobLauncher

JobLauncher 的功能相对来说是比较简单的,是其他Job 相关热点概念中最容易理解的了。JobLauncher 用于启动某个指定了JobParameters 的Job,也就是用来启动JobInstance。JobLauncher 接口代码如下:

public interface JobLauncher {
   public JobExecution run(Job job, JobParameters jobParameters) throws JobExecutionAlreadyRunningException,
         JobRestartException, JobInstanceAlreadyCompleteException, JobParametersInvalidException;

}

这个run 方法的作用就是用来根据传入的Job 以及JobParamaters 参数,从JobRepository 获取一个 JobExecution,判断其状态,检查其参数及必要的内容,然后执行这个获取到的Job。

总结

这篇文章我们主要讲述了JobRepository 以及JobLauncher 的概念,同时在文章当中我们总结了Job/JobRepository/JobParameters... 等等Job 相关的概念的关系。通过这个总结,其实我可以更好地从整体上把握Job 相关的概念,同时在实际应用中也可以做到对Job 的使用有很清晰的认知。