代码之家  ›  专栏  ›  技术社区  ›  Josh

spring批处理限制跨多个服务器的单个作业实例

  •  1
  • Josh  · 技术社区  · 6 年前

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

    我找遍了,没有找到解决这个问题的办法

    1 回复  |  直到 6 年前
        1
  •  4
  •   Josh    6 年前

    我实现了一个监听器,它检查与某个名称匹配的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) {
    
        }
    
    }