为什么jobOperator.startNextInstance不接受参数?

时间:2017-06-02 20:43:38

标签: spring spring-batch jsr352

我有一个接受参数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,为什么不允许?

1 个答案:

答案 0 :(得分:0)

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