春季批处理我该如何强制停止工作

时间:2019-03-15 11:42:08

标签: spring spring-batch

如果处理器返回null,我想停止作业 例如:

BatchStatus.failed

2 个答案:

答案 0 :(得分:0)

为了检测到项目处理器返回的项目为null,可以使用org.springframework.batch.core.ItemProcessListener#afterProcess(Object item, Object result)result参数是处理结果,如果处理器返回null,则可以为null。

现在,如果要在处理器返回null时使作业失败,则可以从该方法引发异常。这是一个示例:

class MyItemProcessListener implements ItemProcessListener {

    @Override
    public void beforeProcess(Object item) {

    }

    @Override
    public void afterProcess(Object item, Object result) {
        if (result == null) {
            throw new RuntimeException("Failing job because processing of item " + item + " returned null");
        }
    }

    @Override
    public void onProcessError(Object item, Exception e) {

    }
}

如果您使用的是面向容错块的步骤,请确保未将从侦听器引发的异常配置为可跳过或可重试。

希望这会有所帮助。

答案 1 :(得分:0)

我建议不要从ItemProcessListener抛出NullPinterException来停止作业。更好的方法是让spring batch自动为您完成。假设您的ItemReader已读取所有数据,然后从ItemReader的read()返回null。如果ItemProcessor无法处理任何内容,请从ItemProcessor的process()返回null。由于使用null调用ItemWriter,因此无需编写任何内容。因此,春季批处理将理解所有记录都已读取,处理和写入。因此,该作业将停止。

我希望这会有所帮助。