java - 保持 SCDF 中的计划作业执行,直到上一个作业执行完成
问题描述
我在 Openshift 环境中运行 SCDF。我正在安排一个 Spring 批处理作业每 5 分钟运行一次。有时该作业可能会运行超过 5 分钟。在那种情况下,是否有可能保持下一个计划的作业执行直到前一个完成它的执行?
我们不想改变作业执行的频率和间隔。
更新 1:
最近我发现使用 Kubernetes cronjob concurrencyPolicy=forbid
,如果前一个作业仍在运行,我们可以添加以阻止下一个作业执行的发生。
我正在寻找 SCDF 中的等效配置。
谢谢。
解决方案
看看属性 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