JobExecution 是什么

65 阅读2分钟

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

这篇文章我们来讲一下JobExecution。

JobExecution 是什么

在我们了解了Job 以及JobInstance 之后,我们就可以讲一下JobExecution 的概念了。JobExecution 是指单次运行Job 的,在代码层级的相关概念。

但是JobExecution 只可以说是尝试运行一次job 的概念。因为这一次执行可能失败。另外我们也知道,JobInstance 的作用就是用来描述一个Job 运行的实例。只有当Job 执行完全成功的时候(JobExecution 执行成功),给定的与这次执行对应的JobInstance 才会被认为执行成功。

我们举例来说,就拿给员工发放福利返现任务这个场景做解释,这个任务每月执行一次,我们以时间为标准设置JobParameters,假设第一次设置的参数为2022-10-01,但是这次任务由于一些不可控因素(网络、抖动等等)失败了,那么我们会继续使用2022-10-01 的JobParameters 参数来继续运行这个Job。我们继续假设第二次这个Job 运行成功了。那么我们来看这个过程中涉及到的一些概念:

  • 2022-10-01 这个JobParameters 对应的任务就是一个JobInstance
  • 第一次失败的运行和第二次成功的运行对应的是两个JobExecution 实例

总结来说,就是一个JobInstance 对应了两个JobExecution。

我们接下来看一下JobExecution 的接口定义:

public interface JobExecution {
    public long getExecutionId();
    public String getJobName();
    public BatchStatus getBatchStatus();
    public Date getStartTime();
    public Date getEndTime();
    public String getExitStatus();
    public Date getCreateTime();
    public Date getLastUpdatedTime();
    public Properties getJobParameters();
}

由于这些接口的定义都比较清晰,所以不做过多的解释了。但是这些方法中有一个需要说明一下,就是public BatchStatus getBatchStatus(); 对于这个方法的返回参数BatchStatus 其实是一个枚举,用来代表job 的运行状态。这个方法的作用就是用来获取一个job 某一次执行的一个状态。枚举类型的代码如下:

public enum BatchStatus {
    COMPLETED, STARTING, STARTED, STOPPING, STOPPED, FAILED, ABANDONED, UNKNOWN;
}

这些其实对于每个Job 来说非常关键,Spring Batch 在运行的过程中会创建出来一些可以持久化这些数据的表,用来将这些数据持久化。

总结

这篇文章我们主要讲述了JobExecution 的概念,同时举例说明了各个概念在job 运行过程中的表现,比较容易理解。