Java 如何在春季批量中强制停止作业?

Java 如何在春季批量中强制停止作业?,java,spring,spring-batch,Java,Spring,Spring Batch,我有一个定期创建工作的web应用程序。此web应用程序位于服务器上,工作正常。如果服务器崩溃然后重新启动,JobExplorer显示作业仍在运行。但事实上,这项工作从未停止过,我必须自己停止。为此,我尝试使用JobOperator,有趣的是它说它不能停止未运行的作业 要获取正在运行的作业列表,请执行以下操作: for (String jn : jobExplorer.getJobNames()) for (JobExecution je : jobExplorer

我有一个定期创建工作的web应用程序。此web应用程序位于服务器上,工作正常。如果服务器崩溃然后重新启动,
JobExplorer
显示作业仍在运行。但事实上,这项工作从未停止过,我必须自己停止。为此,我尝试使用
JobOperator
,有趣的是它说它不能停止未运行的作业

要获取正在运行的作业列表,请执行以下操作:

for (String jn : jobExplorer.getJobNames())             
   for (JobExecution je : jobExplorer.findRunningJobExecutions(jn)) {
        ...
    }
要停止作业,请执行以下操作:

try {
    jobOperator.stop(je.getId());
} catch (NoSuchJobExecutionException e1) {
    e1.printStackTrace();
} catch (JobExecutionNotRunningException e1) {
    e1.printStackTrace();
}
错误消息为“JobExecution必须正在运行才能停止”


je.isRunning()
je.isStopping()
都返回true。

但事实上,作业从未停止,我必须自己停止它
:你能解释一下当服务器崩溃时,作业如何仍在运行吗?作业是在与webapp相同的JVM中运行,还是在单独的JVM中运行?1。当服务器崩溃时,它会自动重新启动。当它再次启动时,作业的状态为正在运行。2.它们都在同一JVM上。在这种情况下,您需要在作业存储库中手动更新作业状态。请参阅:@MahmoudBenHassine I set
e.setStatus(BatchStatus.FAILED)
e.setExitStatus(ExitStatus.FAILED)
,然后调用
jobOperator.stop(je.getId())状态仍为“停止”,作业列为“正在运行”