如果处理器返回null,我想停止作业 例如:
BatchStatus.failed
答案 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,因此无需编写任何内容。因此,春季批处理将理解所有记录都已读取,处理和写入。因此,该作业将停止。
我希望这会有所帮助。