如何重新启动已停止的spring批处理作业

taor4pac  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(429)
@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]的作业配置
任何解决方案!

okxuctiv

okxuctiv1#

这是因为你在打电话 jobRegistry.register(new ReferenceJobFactory(job)); 每次在里面 restart 方法,而这通常只调用一次。
因此,您需要从方法中删除该调用,如下所示:

@GetMapping("/resumejob/{id}")
public void restart(@PathVariable(name = "id") long id) throws Exception {
   jobOperator.restart(id); // (1)
}

并将作业注册移动到只在初始化web控制器时调用一次的方法,例如使用带注解的方法 @PostConstruct 或者让你的控制器实现 InitializingBean#afterPropertiesSet . 下面是一个 @PostConstruct 注解:

@PostConstruct
public void registerJob() {
   jobRegistry.register(new ReferenceJobFactory(job));
}

相关问题