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

时间:2018-06-07 16:52:13

标签: java spring spring-boot spring-batch

我有一个可以跨多个服务器运行的Spring Batch作业。我有一个监听器,可以防止在一台服务器上同时运行多个作业实例。但是,我想确保无法在多台服务器上同时运行此作业。

我已经搜索过,找不到解决此问题的方法

1 个答案:

答案 0 :(得分:2)

我实现了一个侦听器,该侦听器检查与特定名称匹配的spring批处理控制表中正在运行的Job Execution的数量。如果执行的大小超过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) {

    }

}