当前位置: 首页 > 知识库问答 >
问题:

spring批处理在10秒后停止作业

那利
2023-03-14

我正在尝试在后台运行作业,允许我根据某种条件或在超时发生后停止它。

我有这两块代码

@ContextConfiguration(classes={EmbeddedISpringBatchConfiguration.class, MonitoredJobConfig.class})
@RunWith(SpringJUnit4ClassRunner.class)
public class RunMonitoredJob2 {

@Autowired
private JobLauncher jobLauncher;

@Autowired
private JobRepository jobRepository;

@Autowired
private Job job;

@Test
public void testLaunchJob() throws Exception {

    JobExecution execution = jobLauncher.run(job, new JobParameters());

    Thread.sleep(10000);

    execution.stop();
}
@ContextConfiguration(classes={EmbeddedISpringBatchConfiguration.class, MonitoredJobConfig.class})
@RunWith(SpringJUnit4ClassRunner.class)
public class RunMonitoredJob {

@Autowired
private JobRepository jobRepository;

@Autowired
private Job job;

@Test
public void testLaunchJob() throws Exception {

    JobExecution execution = jobLauncher().run(job, new JobParameters());

    Thread.sleep(10000);

    execution.stop();
}

public JobLauncher jobLauncher() {
    final SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
    jobLauncher.setJobRepository(jobRepository);
    final SimpleAsyncTaskExecutor simpleAsyncTaskExecutor = new SimpleAsyncTaskExecutor();
    jobLauncher.setTaskExecutor(simpleAsyncTaskExecutor);
    return jobLauncher;
}

共有1个答案

后烨煜
2023-03-14

尝试使用scheduler,它将在特定时间间隔后调用,而不是使用Thread.Sleep

@Scheduled(fixedDelayString = "${cron.batch-timeout-check-delay}", initialDelayString = "${cron.batch-timeout-check-initial-delay}")
    public void execute() throws Exception{
      //get jobExceutionId of job to stop
      JobExceution jobExecution = jobExplorer.getJobExceution(jobExceutionId);
      boolean isTimeout = (new Date().getTime() - jobExecution.getCreateTime().getTime()) > 50000 //Here timout
      if(isTimeout){
        jobexceution.stop();
      }
    }
 类似资料:
  • 我已经使用开始我的作业,当我尝试使用另一个请求停止作业时,然后获取exeption: JobExecutionNotrunningException:JobExecution必须正在运行,才能停止 当打印作业状态总是获取但批处理作业正在运行时 它的web应用程序,首先上传一些CSV文件,并使用spring batch启动一些操作,在执行过程中,如果用户需要停止,则从另一个控制器方法来停止请求,并试

  • 我最近开始使用java配置方式编写spring批处理程序,并使用spring批处理和starter包。我使用了分区的步骤和任务执行器来完成我的工作,我面临的问题是,一旦作业完成,批处理过程就不会停止,它一直在我的eclipse和Linux盒子中运行。我手动找到并终止作业。你能帮个忙吗。当我在没有分区步骤的情况下以单线程的方式运行作业时,这工作很好。 我的作业配置:

  • 我在我的JAVA应用程序中配置了Spring批处理作业,该应用程序在集群中运行。因此,相同的作业被执行两次,这是我不想要的。 所以我想在作业中配置一个步骤,它将检查CREATE_DATE是否在BATCH_JOB_EXECUTION表中存在,并将继续或故障转移。 如何在spring批处理步骤中进行配置?

  • 我能够通过命令行使用成功地启动springboot-batch作业。

  • 我有一个spring boot/spring batch应用程序,它启动不同的作业。 当应用程序停止()时,作业仍处于运行状态(STARTED)。 尽管给了应用程序足够的时间来正常地停止作业,但结果与相同。 我已经找到了一种方法(见下文),可以在应用程序使用终止时优雅地停止所有作业,但我想知道是否有更好/更简单的方法来实现这一目标。 下面的一切都是关于我如何阻止这些工作的文档。 在的博客条目中,用

  • 在一个项目中,我们必须运行一个定期开始的作业(现在QA env上每5分钟开始一次),该作业处理40K用户的一些任务。我们决定使用Spring Batch,因为它非常适合,并且几乎用默认配置实现了它(例如,它使用)。好的,有一个工作由一个步骤组成: 开箱即用 在内存中执行轻量级计算的自定义 自定义,它通过多个JPQL和本机查询将数据保存到同一个PostgreSQL db。 作业本身是用调度的,并且每