Spring boot 如何在Spring云数据流中获取重启作业的执行id

Spring boot 如何在Spring云数据流中获取重启作业的执行id,spring-boot,spring-batch,spring-cloud-dataflow,spring-cloud-task,Spring Boot,Spring Batch,Spring Cloud Dataflow,Spring Cloud Task,我们创建了一个Spring批处理作业,通过Spring云任务(一个简单的任务,它只执行作业)在Spring云数据流中执行。UI和RESTAPI都检查了执行情况,在理想情况下一切正常。当我们试图停止并重新启动作业时,问题就出现了。遵循REST API指南: 启动任务: 使用上一点中返回的任务执行id获取任务执行的信息: 第一个问题出现了:如果使用任务执行id()停止任务,与任务关联的作业将停止执行(在日志中),但在反数据库中,作业将保持为“已启动”。然后就不可能重新启动作业执行,因为它从未达到SC

我们创建了一个Spring批处理作业,通过Spring云任务(一个简单的任务,它只执行作业)在Spring云数据流中执行。UI和RESTAPI都检查了执行情况,在理想情况下一切正常。当我们试图停止并重新启动作业时,问题就出现了。遵循REST API指南:

  • 启动任务:
  • 使用上一点中返回的任务执行id获取任务执行的信息:
  • 第一个问题出现了:如果使用任务执行id()停止任务,与任务关联的作业将停止执行(在日志中),但在反数据库中,作业将保持为“已启动”。然后就不可能重新启动作业执行,因为它从未达到SCDF专家的“已停止”状态-->。。。这不是一个bug还是有技术上的原因
  • 如果要停止作业,则需要从点2的响应中获取JobExecutionId first参数,并使用作业执行id()发出请求
  • 等待适当的时间以完成运行步骤执行,作业将达到“停止”状态。如果现在重新启动作业(),将创建一个新的任务执行,并与新作业执行相链接,它将完成处理
  • 现在是一个百万美元的问题:如果我们想将SCDF与一个规划器(如Control-M)集成,那么如果重启请求没有返回任何执行id,我们如何发出轮询请求来检查重启后执行的状态?如果只是正常执行,我们可以使用与任务执行id(步骤2)关联的作业执行id(步骤4)发送轮询请求,但在重新启动后,我们是“盲”的

    第一个问题出现了:如果使用任务执行id()停止任务,则与任务关联的作业将停止执行(在日志中),但在反数据库中,作业将保持为“已启动”。然后,由于作业从未达到“停止”状态,因此无法重新启动作业执行

    这看起来像一个bug,请随时报告。报告时,请添加任何附加信息,如SCDF服务器日志等,以便更好地进行调查

    如果我们想将SCDF与规划器(如Control-M)集成,如果重启请求没有返回任何执行id,我们如何发出轮询请求来检查重启后执行的状态?如果只是正常执行,我们可以使用与任务执行id(步骤2)关联的作业执行id(步骤4)发送轮询请求,但在重新启动后,我们是“盲”的


    SCDF服务器公开REST端点以检查作业执行的状态。您可以点击服务器端点,也可以使用REST客户端进行检查。有关REST客户端的更多信息,请查看[此处]。

    嗯,我不知道是否有更直接的方法来实现这一点,但这是与外部系统集成的可能解决方案:

  • 启动任务:返回任务执行id
  • 恢复与上一个任务执行id相关联的作业执行id:正在作业执行id字段“executionId”
  • 使用作业执行id停止执行(也可以选择,它可能已由错误完成):
  • 使用作业执行id重新启动/恢复执行:
  • 使用“旧的”作业执行id获取作业实例id:作业实例id是字段“作业id”
  • 使用作业实例id获取“新的”作业执行id:其中字段“jobExecutions”是一个执行数组,其中第一个位置是最后一次执行,因此我们可以从字段“executionId”获取新的作业执行id

  • 你好,Ilayaperumal Gopinathan,谢谢你的回答。我将在GitHub中报告这个问题。关于作业执行的状态,我知道有端点可以获取执行信息,问题是我们无法提前知道执行ID。启动请求返回可用于恢复信息的ID,但重新启动请求不返回任何内容。重新启动请求不返回执行ID,因为预期它将使用其尝试重新启动的相同作业执行ID。不确定我是否误解了您的要求。在Spring Batch中,作业执行ID不能重用,每次执行(无论是启动还是重新启动)都有自己的ID。另一件事是“作业实例ID”,它在启动和重新启动之间是通用的。此参数是作业执行详细信息请求中返回的“jobId”字段。考虑到这一点,我意识到SCDF API中还有另一个实例请求:。有了它,就可以获得数据(缺点是需要4个请求)