SCDF:重新启动并恢复已完成的任务

时间:2019-09-12 05:28:00

标签: spring spring-cloud-dataflow spring-cloud-task

SCDF组合任务运行程序使我们可以选择启用-increment-instance-enabled 。此选项创建一个人工的 run.id 参数,该参数在每次运行时都会递增。因此,该任务对于Spring Batch是唯一的,并且将重新启动。

IdIncrementer的问题是当我将其与没有IdIncrementer的执行混合使用时。如果任务未完成,我想恢复任务。我遇到的问题是在没有IdIncrementer的情况下完成任务时,我无法使用IdIncrementer再次启动任务。

我想知道重新启动并选择恢复的最佳方法是什么?

我的想法是创建一个新的IdResumer,它使用与上次执行相同的 run.id

我们在Openshift v3.11.98上运行SCDF 2.2.1,并使用CTR 2.1.1。

重现此步骤:

  1. 使用以下定义创建新的SCDF任务定义:dummy1:dummy && dummy2: dummy && dummy3: dummy。虚拟应用程序是一个Docker容器,随机失败的可能性为50%。
  2. 使用--increment-instance-enabled=true执行SCDF任务,并等待其中一个虚拟任务失败(如果需要,请重新启动)。
  3. 要恢复相同的失败执行,请立即--increment-instance-enabled=false执行SCDF任务。并使其成功完成(如果需要,请重做)。
  4. 使用--increment-instance-enabled=true重新启动SCDF任务。

在第4步,即使再次启用JobInstanceAlreadyCompleteException,组成的任务也会引发--increment-instance-enabled

  

原因:   org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException:   作业实例已经存在,并且已完成   参数= {-spring.cloud.data.flow.taskappname =组合任务运行器,   -spring.cloud.task.executionid = 3190,-spring.datasource.username = testuser,-graph = aaa-stackoverflow-dummy2 && aaa-stackoverflow-dummy3,-spring.cloud.data.flow.platformname = default,-spring .datasource.url = jdbc:postgresql://10.10.10.10:5432 / tms_efa?ssl = true&sslfactory = org.postgresql.ssl.NonValidatingFactory&currentSchema = dev,   -spring.datasource.driverClassName = org.postgresql.Driver,-spring.datasource.password = pass1234,-spring.cloud.task.name = aaa-stackoverflow,-dataflowServerUri = https://scdf-dev.company.com:443/,-increment-instance-enabled = true}。如果要再次运行此作业,请更改参数。

是否有更好的方法来恢复并重新启动任务?

0 个答案:

没有答案