1

我有一个接受参数的工作,x=y我计划每 10 秒运行一次。我是这样开始的:

final JobExecution previousExecution = jobRepository.getLastJobExecution(jobId, jobParameters);
if (previousExecution != null && previousExecution.getStartTime() != null) {
    return jobOperator.startNextInstance(jobId);
} else {
    return jobOperator.start(jobId, PropertiesConverter.propertiesToString(jobParametersConverter.getProperties(jobParameters)));
}

我第一次开始工作时,它进入else子句并成功启动。10 秒后,它进入if子句并成功启动。然后我手动运行作业(通过 REST API),但这次使用参数x=z,它也成功运行。然后 10 秒过去了,工作即将重新开始。现在jobRepository.getLastJobExecution返回正确的x=y执行,但猜猜 -jobOperator.startNextInstance不关心你的参数 - 它只接受jobId. 在它内部加载错误的x=z实例并x=z从现在开始运行作业,直到永远每 10 秒运行一次。

我的问题是 - 为什么startNextInstance不接受 jobParameters?我想为给定的作业参数启动一个 nextInstance,为什么不允许?

4

1 回答 1

1

JobOperator,根据文档是一个低级接口,确实不是启动 Spring Batch Jobs 的理想方式。这JobLauncher确实是在 Spring Batch 中启动作业并接受参数的正确方法。

于 2017-06-02T21:03:13.677 回答