Spring Batch限制跨多个服务器的单个作业实例

2022-02-28 00:00:00 spring java spring-boot spring-batch

我有一个Spring批处理作业,可能会跨多个服务器运行。我有一个侦听器,可以防止作业的多个实例在一台服务器上同时运行。但是,我希望确保此作业不能在多台服务器上同时运行。

我已搜索,但找不到此问题的解决方案


解决方案

我实现了一个侦听器,该侦听器检查与某个名称匹配的Spring批处理控制表中正在运行的Job执行的次数。如果执行大小超过1,则当前作业的jobExecution失败。代码如下:

@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) {

    }

}

相关文章