如何 stop/terminate 在 spring 批处理中执行侦听器的步骤?

how to stop/terminate the step in execution listeners in spring batch?

我在步骤执行侦听器中进行了文件名验证。如果文件名无效,我想 terminate/stop 从继续到 reader 的步骤。如何在小枝批次中实现这一目标?

侦听器是做数据验证的错误地方。如果必须验证单个数据项,请使用处理器并抛出适当的异常。

如果您想验证更多 "general" 方面,例如文件名或文件的存在或不属于单个项目的任何其他条件,请在处理步骤之前使用 tasklet 步骤。

Hansjoerg 的回答是有道理的。至于如何实现你想要做的事情,这里有一个例子:

@Override
public ExitStatus afterStep(StepExecution stepExecution) {
    return ExitStatus.FAILED;
}

这将 return 一个 ExitStatus FAILED,您可以在 <next on="" /> 标签上使用它来防止进入 reader。

解决问题的最佳选择是使用 JobExecutionDecider 执行文件名验证并停止作业或转到下一步