11.7 当没有找到输入时Step处理完成
在许多批处理场景中,发现数据库或者文件中没有对应的行.Step只是认为没有找到工作和读入0行items.所有的ItemReader实现提供了开箱即用默认的Spring Batch方法.如果没有输出,可能会导致一些混乱,即使输入是当前的(如果一个文件通常是错误的,等等),为此,元数据本身应该检查以确定多少工作被框架发现和处理.然而,如果发现没有输入被认为只是例外呢?在这种情况下,以编程方式检查元数据有多少items没有被处理及其导致失败的原因,是最好的解决方案.这是一个常见的用例,一个监听器提供此功能:
public class NoWorkFoundStepExecutionListener extends StepExecutionListenerSupport {
public ExitStatus afterStep(StepExecution stepExecution) {
if (stepExecution.getReadCount() == 0) {
return ExitStatus.FAILED;
}
return null;
}
}
以上所述StepExecutionListener检查readCount属性,StepExecution 在’afterStep’阶段确定items是否被读取到,如果这样的话,一个退出代码返回FAILED,表明这个Step失败.否则,返回null,这不会影响step状态