我有一个在我们的云平台上运行的 Spring Batch 任务,它将使用提供的命令行参数启动,然后跳过第一步的执行,并出现以下错误:
[OUT] The job execution id 992 was run within the task execution 1325
[OUT] Step already complete or not restartable, so no action to execute:
StepExecution: id=1071, version=3, name=OFileStep, status=COMPLETED, exitStatus=COMPLETED, readCount=0, filterCount=0, writeCount=0 readSkipCount=0,
writeSkipCount=0, processSkipCount=0, commitCount=1, rollbackCount=0, exitDescription=
我调查了 Spring Batch 使用的 MySQL 实例中的元数据表,发现 JOB_INSTANCE_ID 在多次执行之间是相同的,而每次应该增加 1。
我为作业配置定义的@Bean是:
@Bean
public Job job() {
return jobBuilderFactory.get(OTaskConstants.JOB_NAME)
.listener(listener())
.incrementer(new RunIdIncrementer())
.start(dataTransferTaskStep())
.next(controlMTaskStep())
.build();
}
有人知道是什么原因导致这种行为吗?
最佳答案
下面一行清楚地说明了一切。
Step already complete or not restartable, so no action to execute:
意味着步骤/作业已经完成并且无法重新启动。这就是 Spring Batch 的行为。为了绕过这个问题,我们需要传递一个独特的参数。
就您而言,我看到您已经有 RunIdIncrementer。现在的问题是为什么它不起作用。
您能否查看 BATCH_JOB_PARMS 表来了解传递给作业的参数是什么?可能你错过了一些东西。
您还可以使用 SimpleIncrementor。请参阅下面的代码以获取解释。
关于mysql - 为什么我的 Spring Batch 任务使用相同的 JOB_INSTANCE_ID 启动多个作业执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59417982/