我正在尝试停止弹簧批处理执行。我尝试了
jobExecution.stop();
jobRepository.update(jobExecution);
对工作没有影响。
我尝试
jobOperator.stop(JOB_EXECUTION_ID);
我正在得到Nosuchjobexception。我是春季批次的新手。谁能解释为什么我会得到Nosuchjobexception?
进行了一些调试后,我发现在职位指导中找不到工作。JobExplorer和JobRepository能够找到工作。作业指导需要任何特定的配置吗?
07:22:27.625 WARN o.s.b.c.l.s.SimpleJobOperator : Cannot find Job object in the job registry. StoppableTasklet#stop() will not be called org.springframework.batch.core.launch.NoSuchJobException: No job configuration with the name [wf-demo-1552486941361] was registered
at org.springframework.batch.core.configuration.support.MapJobRegistry.getJob(MapJobRegistry.java:66) ~[spring-batch-core-4.0.1.RELEASE.jar:4.0.1.RELEASE]
at org.springframework.batch.core.launch.support.SimpleJobOperator.stop(SimpleJobOperator.java:403) ~[spring-batch-core-4.0.1.RELEASE.jar:4.0.1.RELEASE]
是错误堆栈
不使用 JobExecution.stop
,将在未来版本中删除(请参阅batch-1987)。
JobOperator#stop(jobExecutionId)
是必经之路。错误 NoSuchJobFoundException
不是弹簧批次异常,所以我不知道什么是含义。我能想到的最接近的例外是org.springframework.batch.core.launch.NoSuchJobExecutionException
,如果工作运算符找不到具有给定ID的执行,则将其抛出。确保您将有效的作业执行ID传递给stop
方法。
此代码帮助我
@Bean
public JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor() {
JobRegistryBeanPostProcessor postProcessor = new JobRegistryBeanPostProcessor();
postProcessor.setJobRegistry(jobRegistry);
return postProcessor;
}
阅读有关JobRegistry的文档