春天批次我怎么能强制停止工作

问题描述 投票:0回答:2

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

BatchStatus.failed
spring spring-batch
2个回答
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) {

    }
}

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

希望这可以帮助。


0
投票

我建议不要从ItemProcessListener抛出NullPinterException来停止作业。更好的方法是让spring批处理自动为你做。假设您的ItemReader已经读取了所有数据,那么从ItemReader的read()返回null。如果ItemProcessor没有得到任何处理,则从ItemProcessor的进程()返回null。由于使用null调用ItemWriter,因此您无需编写任何内容。因此,弹簧批将理解所有记录都被读取,处理和写入。因此,工作将被停止。

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.