有没有一种解决方案,可以让您检查给定作业(JobInstance)的作业存储库,白天是否存在已完成的作业,如果当天batch_job_execution表上没有完成的状态,那么我必须发送一个通知或退出代码,例如我们今天一无所获。

我计划在从JobExecutionListenerSupport扩展的类中实现该解决方案,如下所示:

public class JobCompletionNotificationListener extends JobExecutionListenerSupport {

private Logger logger = LoggerFactory.getLogger(JobCompletionNotificationListener.class);
private JobRegistry jobRegistry;
private JobRepository jobRepository;

public JobCompletionNotificationListener(JobRegistry jobRegistry, JobRepository jobRepository) {
    this.jobRegistry = jobRegistry;
    this.jobRepository = jobRepository;
}

@Override
public void afterJob(JobExecution jobExecution) {
    System.out.println("finishhhhh");
    //the logic if no job completed to day
    if(noJobCompletedToDay){
        Notify();
    }
    if (jobExecution.getStatus() == BatchStatus.COMPLETED) {
        logger.info("!!! JOB FINISHED! -> example action execute after Job");
    }
}


}

最佳答案

您可以使用JobExplorer#getLastJobExecution获取作业实例的最后一次执行,并检查它是否在当天完成。

根据要进行检查的时间,您还可以确保当前没有正在运行的作业(JobExplorer#findRunningJobExecutions可以提供帮助)。

10-08 01:17