如果处理器返回null,我想停止工作示例:
BatchStatus.failed
为了检测到项目处理器为项目返回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) {
}
}
如果使用容错块面向步骤,请确保从侦听器抛出的异常未配置为可跳过或可重试。
希望这可以帮助。
我建议不要从ItemProcessListener抛出NullPinterException来停止作业。更好的方法是让spring批处理自动为你做。假设您的ItemReader已经读取了所有数据,那么从ItemReader的read()返回null。如果ItemProcessor没有得到任何处理,则从ItemProcessor的进程()返回null。由于使用null调用ItemWriter,因此您无需编写任何内容。因此,弹簧批将理解所有记录都被读取,处理和写入。因此,工作将被停止。
我希望这有帮助。