有没有一种解决方案,可以让您检查给定作业(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
可以提供帮助)。