首页 > 解决方案 > 保持 SCDF 中的计划作业执行,直到上一个作业执行完成

问题描述

我在 Openshift 环境中运行 SCDF。我正在安排一个 Spring 批处理作业每 5 分钟运行一次。有时该作业可能会运行超过 5 分钟。在那种情况下,是否有可能保持下一个计划的作业执行直到前一个完成它的执行?

我们不想改变作业执行的频率和间隔。

更新 1: 最近我发现使用 Kubernetes cronjob concurrencyPolicy=forbid,如果前一个作业仍在运行,我们可以添加以阻止下一个作业执行的发生。

我正在寻找 SCDF 中的等效配置。

谢谢。

标签: javaspring-bootspring-batchopenshiftspring-cloud-dataflow

解决方案


看看属性 spring.cloud.task.single-instance-enabled。Документация - Spring-cloud-task#features-single-instance-enabled
这可以防止两个具有相同名称的任务运行。
我检查了 SCDF (2.6.1),在运行两个相同的任务时出现错误:

Caused by: org.springframework.cloud.task.listener.TaskExecutionException: Task with name "timestamp-task" is already running.
    at org.springframework.cloud.task.configuration.SingleInstanceTaskListener.lockTask(SingleInstanceTaskListener.java:121) ~[spring-cloud-task-core-2.2.3.RELEASE.jar!/:2.2.3.RELEASE]
    ... 31 common frames omitted

推荐阅读