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

使用jobOperator停止Spring批处理作业

范轶
2023-03-14

我已经使用joblauncher.run(processJob,jobParameters);开始我的作业,当我尝试使用另一个请求停止作业时joboperator.stop(jobexecution.getid());,然后获取exeption:

JobExecutionNotrunningException:JobExecution必须正在运行,才能停止

Set<JobExecution> jobExecutionsSet= jobExplorer.findRunningJobExecutions("processJob");
        for (JobExecution jobExecution:jobExecutionsSet) {
            System.err.println("job status : "+ jobExecution.getStatus());
            if (jobExecution.getStatus()== BatchStatus.STARTED|| jobExecution.getStatus()== BatchStatus.STARTING || jobExecution.getStatus()== BatchStatus.STOPPING){
                jobOperator.stop(jobExecution.getId());
                System.out.println("###########Stopped#########");
            }
        }

当打印作业状态总是获取作业状态:停止但批处理作业正在运行时

它的web应用程序,首先上传一些CSV文件,并使用spring batch启动一些操作,在执行过程中,如果用户需要停止,则从另一个控制器方法来停止请求,并试图停止运行作业

请帮助我停止运行作业

共有1个答案

梁巴英
2023-03-14

如果在作业运行时停止作业(通常处于started状态),则不应出现此异常。如果出现此异常,则表示在作业当前停止时已停止作业(这就是stopp状态的含义)。

jobexplorer.findrunningjobexecutions返回正在运行的执行,因此,如果在这一行之后的下一行中,您有一个作业处于stopping状态,这意味着在调用jobexplorer.findrunningjobexecutions之后状态就改变了。您需要知道这是可能的,您的控制器应该处理这种情况。

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

  • 我正在尝试在后台运行作业,允许我根据某种条件或在超时发生后停止它。 我有这两块代码:

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

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

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

  • 我有以下工作要处理在一定的时间间隔或特别的基础上。 作业中的步骤如下: 我也想要用户界面,在那里我可以触发一个特别的基础上的工作,而且我应该能够提供参数从用户界面。 我想用Spring batch来完成这个任务,但它更多的是用于读->处理->写之类的工作。这里,在第一步中,我正在生成由第二步读取的数据。我不确定我是否还可以使用Spring batch来实现这个,或者有更好的方法来实现这个。