我有一个接受参数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,为什么不允许?
答案 0 :(得分:0)
JobOperator
,根据文档是一个低级别的界面,实际上并不是启动Spring Batch Jobs的理想方式。 JobLauncher
实际上是在Spring Batch中启动作业并接受参数的正确方法。