如何避免在状态仍在Spring Cloud Data Flow上运行时重新启动任务

时间:2019-10-30 09:51:56

标签: java spring-batch spring-cloud-dataflow

我已经在Spring Cloud Data Flow上部署了一个Spring Batch项目作为任务。

我第一次启动了任务(大约要运行5分钟,这使任务的状态为“正在运行”)。但是,当它的状态正在运行并且可以再次使用时,我第二次重新启动了该任务。

1)如何配置直到上次完成任务后才能重新启动任务。 2)此外,我发现停止作业时,它将执行直到完成当前步骤为止(我的作业有2个步骤,而第二个步骤未执行)。但是,有什么方法可以在我停止工作时立即将其关闭(步骤1)?

2 个答案:

答案 0 :(得分:1)

您可以使用JobExplorer类来检查正在运行的作业,请参见jobExplorer.findRunningJobExecutions(jobName)方法。

在JobLauncher类中,您可以执行以下操作:

@Component
public class MyJobLauncher {

    private static final Logger LOG = LoggerFactory.getLogger(MyJobLauncher.class);

    private final Job job;

    private final JobLauncher jobLauncher;

    private final JobExplorer jobExplorer;

    @Autowired
    public MyJobLauncher(@Qualifier("myJob") Job job, JobLauncher jobLauncher, JobExplorer jobExplorer) {
        this.job = job;
        this.jobLauncher = jobLauncher;
        this.jobExplorer = jobExplorer;
    }

    public void launchJob() throws JobParametersInvalidException, JobExecutionAlreadyRunningException,
            JobRestartException, JobInstanceAlreadyCompleteException, IOException {

        if (jobExplorer.findRunningJobExecutions("myJob").isEmpty()) {
            LOG.info("Starting myJob");
            jobLauncher.run(job, new JobParameters());
            LOG.info("Stopping myJob");
        }
    }
}

要关闭作业,请检查可以从jobExplorer.getJobExecution()方法获取的JobExecution.stop()方法。

答案 1 :(得分:1)

  

在状态仍在Spring Cloud Data Flow上运行时如何避免重新启动任务

Spring Cloud Task 2.0.0添加了一项功能,可让您防止任务同时运行。参见https://spring.io/blog/2018/05/07/spring-cloud-task-2-0-0-release-is-now-available#restricting-concurrent-task-execution

您需要激活spring.cloud.task.singleInstanceEnabled=true属性。

您可以在Restricting Spring Cloud Task Instances部分中找到更多详细信息。