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。
重现此步骤:
dummy1:dummy && dummy2: dummy && dummy3: dummy
。虚拟应用程序是一个Docker容器,随机失败的可能性为50%。--increment-instance-enabled=true
执行SCDF任务,并等待其中一个虚拟任务失败(如果需要,请重新启动)。--increment-instance-enabled=false
执行SCDF任务。并使其成功完成(如果需要,请重做)。--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}。如果要再次运行此作业,请更改参数。
是否有更好的方法来恢复并重新启动任务?