Class MultiResourceItemReader<T>

All Implemented Interfaces:
ItemReader<T>, ItemStream, ItemStreamReader<T>

public class MultiResourceItemReader<T> extends AbstractItemStreamItemReader<T>
Reads items from multiple resources sequentially - resource list is given by setResources(Resource[]), the actual reading is delegated to setDelegate(ResourceAwareItemReaderItemStream).

Input resources are ordered using setComparator(Comparator) to make sure resource ordering is preserved between job runs in restart scenario.

Author:
Robert Kasanicky, Lucas Ward, Mahmoud Ben Hassine
  • Constructor Details

    • MultiResourceItemReader

      public MultiResourceItemReader()
  • Method Details

    • setStrict

      public void setStrict(boolean strict)
      In strict mode the reader will throw an exception on open(org.springframework.batch.item.ExecutionContext) if there are no resources to read.
      Parameters:
      strict - false by default
    • read

      @Nullable public T read() throws Exception, UnexpectedInputException, ParseException
      Reads the next item, jumping to next resource if necessary.
      Returns:
      T the item to be processed or null if the data source is exhausted
      Throws:
      ParseException - if there is a problem parsing the current record (but the next one may still be valid)
      NonTransientResourceException - if there is a fatal exception in the underlying resource. After throwing this exception implementations should endeavour to return null from subsequent calls to read.
      UnexpectedInputException - if there is an uncategorised problem with the input data. Assume potentially transient, so subsequent calls to read might succeed.
      Exception - if an there is a non-specific error.
    • close

      public void close() throws ItemStreamException
      Close the setDelegate(ResourceAwareItemReaderItemStream) reader and reset instance variable values.
      Throws:
      ItemStreamException
    • open

      public void open(ExecutionContext executionContext) throws ItemStreamException
      Figure out which resource to start with in case of restart, open the delegate and restore delegate's position in the resource.
      Parameters:
      executionContext - current step's ExecutionContext. Will be the executionContext from the last run of the step on a restart.
      Throws:
      ItemStreamException
    • update

      public void update(ExecutionContext executionContext) throws ItemStreamException
      Store the current resource index and position in the resource.
      Parameters:
      executionContext - to be updated
      Throws:
      ItemStreamException
    • setDelegate

      public void setDelegate(ResourceAwareItemReaderItemStream<? extends T> delegate)
      Parameters:
      delegate - reads items from single Resource.
    • setSaveState

      public void setSaveState(boolean saveState)
      Set the boolean indicating whether or not state should be saved in the provided ExecutionContext during the ItemStream call to update.
      Parameters:
      saveState - true to update ExecutionContext. False do not update ExecutionContext.
    • setComparator

      public void setComparator(Comparator<org.springframework.core.io.Resource> comparator)
      Parameters:
      comparator - used to order the injected resources, by default compares Resource.getFilename() values.
    • setResources

      public void setResources(org.springframework.core.io.Resource[] resources)
      Parameters:
      resources - input resources