@GetMapping("/stopjob")
public void stop() throws Exception{
Set<Long> executions = jobOperator.getRunningExecutions("LoadData");
jobOperator.stop(executions.iterator().next());
}
@GetMapping("/resumejob/{id}")
public void restart(@PathVariable(name = "id") long id) throws Exception {
jobRegistry.register(new ReferenceJobFactory(job));
jobOperator.restart(id); // (1)
}
停止一个作业可以正常工作,但恢复作业只是在运行项目后的第一次工作,如果我在另一次调用这个方法,我得到这个执行选项
org.springframework.batch.core.configuration.duplicatejobexception:已注册名为[loaddata]的作业配置
任何解决方案!
1条答案
按热度按时间okxuctiv1#
这是因为你在打电话
jobRegistry.register(new ReferenceJobFactory(job));
每次在里面restart
方法,而这通常只调用一次。因此,您需要从方法中删除该调用,如下所示:
并将作业注册移动到只在初始化web控制器时调用一次的方法,例如使用带注解的方法
@PostConstruct
或者让你的控制器实现InitializingBean#afterPropertiesSet
. 下面是一个@PostConstruct
注解: