我正在尝试在后台运行作业,允许我根据某种条件或在超时发生后停止它。
我有这两块代码:
@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;
}
尝试使用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。 作业本身是用调度的,并且每