Spring Batch 中的Job 是什么

337 阅读2分钟

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

这篇文章介绍一些Spring Batch 框架的重点且基本的概念。

什么是 Job

在spring batch 批处理框架中,最主要的带个概念就是Job 和Step。

Job 代表一个批处理过程,也就是一个批处理过程的概念的封装。在Spring Batch 中,Job 是最顶层的概念的抽象,在框架中是一个接口:

public interface Job {
    String getName();
    boolean isRestartable();
    void execute(JobExecution execution);
    JobParametersIncrementer getJobParametersIncrementer();
    JobParametersValidator getJobParametersValidator();
}

如上,在Job 接口中有5 个方法。对应于Spring Batch 框架中,也有几个相应的实现类,但是其宗旨都是依照者Job 接口的定义而来。

Job 其实就是我们运行任务的基本单位,每个Job 由n 个Step 组成,用户可以自定义其执行顺序。可以将job 看作是step 的仓库或者容器。

我们在前面提过,Job 接口是最顶层的概念的抽象,在Job 的抽象概念之下,还有着JobInstance 和JobExecution 两个比较底层的概念的抽象。

什么是 jobInstance

我们在上文中提到过JobInstance,相对于Job 来说,JobInstance 是较底层的一个抽象概念,它的接口定义如下:

public interface JobInstance {
    // 获取JobInstance 的唯一id
    public long getInstanceId();
    // 获取Job 的名称
    public String getJobName(); 
}

JobInstance 接口中只有两个方法,方法的作用都已经在代码块中做了详细的备注。我们重点应该理解JobInstance 的含义和作用。

JobInstance 是在某个Job 的运行过程中,作业执行过程的概念,也可以把JobInstance 理解为一个Job 的运行实例。(Instance 的中文含义就是实例)

可能上面说的有些抽象,我们不妨举个例子:比如说我们有一个批处理任务,用来为员工每月发放福利现金。我们定义这个Job 的名称为PaymentJob。按照我们的规则,这个批处理每月会执行一次,那么每个月就会有一个JobInstance 生成。这样一说明,应该就比较好理解了。

总结

这篇文章主要是围绕Spring Batch 的Job 的相关概念做介绍,比较易于理解。