11.7 当没有找到输入时Step处理完成

在许多批处理场景中,发现数据库或者文件中没有对应的行.Step只是认为没有找到工作和读入0行items.所有的ItemReader实现提供了开箱即用默认的Spring Batch方法.如果没有输出,可能会导致一些混乱,即使输入是当前的(如果一个文件通常是错误的,等等),为此,元数据本身应该检查以确定多少工作被框架发现和处理.然而,如果发现没有输入被认为只是例外呢?在这种情况下,以编程方式检查元数据有多少items没有被处理及其导致失败的原因,是最好的解决方案.这是一个常见的用例,一个监听器提供此功能:
public class NoWorkFoundStepExecutionListener extends StepExecutionListenerSupport {

  1. public ExitStatus afterStep(StepExecution stepExecution) {
  2. if (stepExecution.getReadCount() == 0) {
  3. return ExitStatus.FAILED;
  4. }
  5. return null;
  6. }
  7. }

以上所述StepExecutionListener检查readCount属性,StepExecution 在’afterStep’阶段确定items是否被读取到,如果这样的话,一个退出代码返回FAILED,表明这个Step失败.否则,返回null,这不会影响step状态