如何避免在 Spring 云数据流上的状态仍为 运行 时重新启动任务

How to avoid relaunching task while it's status is still running on Spring Cloud Data Flow

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

我是第一次启动任务(本来要 运行 大约 5 分钟,这使得任务状态为 "running")。但是,当它的状态为 运行ning 并且它再次运行时,我第二次重新启动了该任务。

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

您可以使用 JobExplorer class 检查 运行 个作业,参见 jobExplorer.findRunningJobExecutions(jobName) 方法。

在您的 JobLauncher class 中,您可以这样做:

@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() 方法。

How to avoid relaunching task while it's status is still running on 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 部分找到更多详细信息。