首页 > 解决方案 > java中jobExecution.getStatus()什么时候返回BatchStatus.STOPPED值?

问题描述

我正在使用 spring.batch.core 的 JobExecution。我正在像这样使用 JobExecutionListenerSupport 的 afterJob 覆盖方法

@Override
 public void afterJob(JobExecution jobExecution) {
        if (jobExecution.getStatus() == BatchStatus.FAILED) {
            
            log.error();
            throw new AbortingJobException();
        } else if (jobExecution.getStatus() == BatchStatus.STOPPED) {
            log.info(jobExecution.getJobInstance().getJobName() + " Stopped");
        } else if (jobExecution.getStatus() == BatchStatus.COMPLETED) {
            // does something
        }
    }

我想知道什么时候jobExecution.getStatus() == BatchStatus.STOPPED成真?

标签: javaspring-bootspring-batchjobs

解决方案


Spring Docs 解释了何时停止作业

https://docs.spring.io/spring-batch/docs/current/reference/html/job.html#stoppingAJob

关闭不是立即的,因为没有办法强制立即关闭,特别是如果执行当前在框架无法控制的开发人员代码中,例如业务服务。但是,一旦控制权返回给框架,它就会将当前 StepExecution 的状态设置为 BatchStatus.STOPPED,保存它,然后在完成之前对 JobExecution 执行相同的操作。


推荐阅读