【发布时间】:2020-06-30 22:17:53
【问题描述】:
我们创建了一个 Spring Batch 作业,通过 Spring Cloud Task(一个简单的任务,它只执行作业)在 Spring Cloud Data Flow 中执行。已使用 UI 和 REST API 检查了执行情况,在理想情况下一切正常。当我们尝试停止并重新启动作业时,问题就出现了。遵循 REST API 指南:
- 启动任务:https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-task-executions-launching
- 使用上一点返回的任务执行id获取任务执行信息:https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-task-executions-detail
- 这是第一个问题:如果我们停止具有任务执行 ID (https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-task-executions-stopping) 的 任务,则与该任务关联的作业会停止执行(在日志中),但在 de 数据库中作业保持为“已开始”。然后不可能重新启动作业执行,因为它永远不会达到“已停止”状态 --> 对于 SCDF 专家......这不是错误还是技术原因?
- 如果我们要停止job,需要从第2点的response中获取jobExecutionIds第一个param,并以job execution id (https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-job-executions-stop)发出请求
- 等待适当的时间完成运行步骤执行,作业达到“已停止”状态。如果现在我们重新启动作业 (https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-job-executions-restart),则会创建一个新的任务执行,并与新的作业执行链接,并完成处理。
现在是百万美元的问题:如果我们想将 SCDF 与计划器(如 Control-M)集成,如果重启请求不返回任何执行 ID,我们如何发出轮询请求以检查重启后执行的状态?如果只是正常执行,我们可以发送与任务执行ID(步骤2)相关联的作业执行ID(步骤4)的轮询请求,但重启后我们是“盲目的”
【问题讨论】:
标签: spring-boot spring-batch spring-cloud-dataflow spring-cloud-task