diff --git a/src/site/docbook/reference/common-patterns.xml b/src/site/docbook/reference/common-patterns.xml index 390df2bef..b7c774d71 100644 --- a/src/site/docbook/reference/common-patterns.xml +++ b/src/site/docbook/reference/common-patterns.xml @@ -472,4 +472,41 @@ <property name="timeout" value="5000" /> </bean> + +
+ Handling ItemReaders when no input is found + + In many batch scenarios, finding no rows in a database or file to + process is not exceptional. The Step is simply + considered to have found no work and completes with 0 items read. All of + the ItemReader implementations provided out of the + box in Spring Batch default to this approach. This can lead to some + confusion if nothing is written out even when input is present. (which + usually happens if a file was misnamed, etc) For this reason, the meta + data itself should be inspected to determine how much work the framework + found to be processed. However, what if finding no input is considered + exceptional? In this case, programmatically checking the meta data for no + items processed and causing failure is the best solution. Because this is + a common use case, a listener is provided with just this + functionality: + + + public class NoWorkFoundStepExecutionListener extends StepExecutionListenerSupport { + + public ExitStatus afterStep(StepExecution stepExecution) { + if (stepExecution.getReadCount() == 0) { + throw new NoWorkFoundException("Step has not processed any items"); + } + return stepExecution.getExitStatus(); + } + } + + + + The above StepExecutionListener inspects the + readCount property of the StepExecution during the + 'afterStep' phase to determine if no items were read. If that is the case, + an exception is thrown, causing the Step to + fail. +