如何防止在spring batch上,如果前一个作业还在运行,如何防止计划作业的执行?

我试图模拟这样的场景:在阅读器中执行Thread.sleep(),但即使当前正在运行的作业没有完成,另一个作业也会被提交到线程池,我如何防止这种情况发生?

@Scheduled(fixedRate = 100)
public void executeChunkJob() throws JobParametersInvalidException, JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException {
    executeJob(chunkJob);
}

private void executeJob(Job jobToRun) throws JobParametersInvalidException, JobExecutionAlreadyRunningException,
        JobRestartException, JobInstanceAlreadyCompleteException{
    try {
        JobParameters parameters = new JobParametersBuilder()
                .addString("JobID", String.valueOf(System.currentTimeMillis())).toJobParameters();

        JobExecution jobExecution = jobLauncher().run(jobToRun, parameters);
        System.out.println("JOb Execution" + jobExecution.getExitStatus());
    } catch(JobExecutionAlreadyRunningException | JobRestartException | JobInstanceAlreadyCompleteException | JobParametersInvalidException e) {
        throw e;
    } catch(OutOfMemoryError | Exception e) {
    }
}

@Bean
public JobLauncher jobLauncher() throws Exception
{
    SimpleJobLauncher jobLauncher = new SimpleJobLauncher();

    jobLauncher.setJobRepository(jobRepository);
    jobLauncher.setTaskExecutor(getCustomTaskExecutor());
    jobLauncher.afterPropertiesSet();

    return jobLauncher;
}

@Bean(name= "myExecutor")
public TaskExecutor getCustomTaskExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(10);
    executor.setMaxPoolSize(100);
    executor.setQueueCapacity(100);
    executor.initialize();
    return executor;
}```

解决方案:

如果你用相同的作业名启动作业,你可以找到作业的运行条件。

根据运行条件,你可以建立你的系统是否启动一个新的作业。

我们需要自动启动JobExplorer。

@Autowired
JobExplorer jobExplorer;

方法片段供您参考。

for (JobExecution jobExecution : jobExecutionsSet) {

   if (jobExecution.getStatus() != BatchStatus.STARTED || jobExecution.getStatus() != BatchStatus.STARTING) {
       // start the new job
   } else {
       // prevent it from starting
   }
}

给TA打赏
共{{data.count}}人
人已打赏
未分类

为elasticsearch注册一个基于HDFS的快照仓库时,出现连接拒绝错误。

2022-9-9 6:58:16

未分类

Vue - 如何在v-btn上设置属性,当点击时删除响应?

2022-9-9 6:58:18

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索