我已经在Spring Cloud Data Flow上部署了一个Spring Batch项目作为任务。
我第一次启动了任务(大约要运行5分钟,这使任务的状态为“正在运行”)。但是,当它的状态正在运行并且可以再次使用时,我第二次重新启动了该任务。
1)如何配置直到上次完成任务后才能重新启动任务。 2)此外,我发现停止作业时,它将执行直到完成当前步骤为止(我的作业有2个步骤,而第二个步骤未执行)。但是,有什么方法可以在我停止工作时立即将其关闭(步骤1)?
答案 0 :(得分:1)
您可以使用JobExplorer类来检查正在运行的作业,请参见jobExplorer.findRunningJobExecutions(jobName)
方法。
在JobLauncher类中,您可以执行以下操作:
@Component
public class MyJobLauncher {
private static final Logger LOG = LoggerFactory.getLogger(MyJobLauncher.class);
private final Job job;
private final JobLauncher jobLauncher;
private final JobExplorer jobExplorer;
@Autowired
public MyJobLauncher(@Qualifier("myJob") Job job, JobLauncher jobLauncher, JobExplorer jobExplorer) {
this.job = job;
this.jobLauncher = jobLauncher;
this.jobExplorer = jobExplorer;
}
public void launchJob() throws JobParametersInvalidException, JobExecutionAlreadyRunningException,
JobRestartException, JobInstanceAlreadyCompleteException, IOException {
if (jobExplorer.findRunningJobExecutions("myJob").isEmpty()) {
LOG.info("Starting myJob");
jobLauncher.run(job, new JobParameters());
LOG.info("Stopping myJob");
}
}
}
要关闭作业,请检查可以从jobExplorer.getJobExecution()
方法获取的JobExecution.stop()方法。
答案 1 :(得分:1)
在状态仍在Spring Cloud Data Flow上运行时如何避免重新启动任务
Spring Cloud Task 2.0.0添加了一项功能,可让您防止任务同时运行。参见https://spring.io/blog/2018/05/07/spring-cloud-task-2-0-0-release-is-now-available#restricting-concurrent-task-execution
您需要激活spring.cloud.task.singleInstanceEnabled=true
属性。
您可以在Restricting Spring Cloud Task Instances部分中找到更多详细信息。