我实现了一个监听器,它检查与某个名称匹配的spring批处理控制表中正在运行的作业执行数。如果执行的大小超过1,则当前作业的作业执行将失败。代码如下:
@Component
public class SingleInstanceListener implements JobExecutionListener {
@Autowired
private JobExplorer explorer;
@Override
public void beforeJob(JobExecution jobExecution) {
String jobName = jobExecution.getJobInstance().getJobName();
Set<JobExecution> executions = explorer.findRunningJobExecutions(jobName);
if(executions.size() > 1) {
jobExecution.stop();
}
}
@Override
public void afterJob(JobExecution jobExecution) {
}
}