Package org.springframework.batch.item.file

# Class MultiResourceItemReader<T>

java.lang.Object
org.springframework.batch.item.ItemStreamSupport
org.springframework.batch.item.support.AbstractItemStreamItemReader<T>
org.springframework.batch.item.file.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 Summary

  Constructors
  Constructor
  Description
  `MultiResourceItemReader()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `close()`
  Close the `setDelegate(ResourceAwareItemReaderItemStream)` reader and reset instance variable values.
  `void`
  `open(ExecutionContext executionContext)`
  Figure out which resource to start with in case of restart, open the delegate and restore delegate's position in the resource.
  `T`
  `read()`
  Reads the next item, jumping to next resource if necessary.
  `void`
  `setComparator(Comparator<org.springframework.core.io.Resource> comparator)`
  `void`
  `setDelegate(ResourceAwareItemReaderItemStream<? extends T> delegate)`
  `void`
  `setResources(org.springframework.core.io.Resource[] resources)`
  `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.
  `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.
  `void`
  `update(ExecutionContext executionContext)`
  Store the current resource index and position in the resource.

  ### Methods inherited from class org.springframework.batch.item.ItemStreamSupport

  `getExecutionContextKey, setExecutionContextName, setName`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## 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.
    Specified by:
      `close` in interface `ItemStream`
    Overrides:
      `close` in class `ItemStreamSupport`
    Throws:
      `ItemStreamException`
    See Also:
      - `ItemStream.close()`

  - ### 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.
    Specified by:
      `open` in interface `ItemStream`
    Overrides:
      `open` in class `ItemStreamSupport`
    Parameters:
      `executionContext` - current step's `ExecutionContext`. Will be the executionContext from the last run of the step on a restart.
    Throws:
      `ItemStreamException`
    See Also:
      - `ItemStream.open(ExecutionContext)`

  - ### update

    public void update(ExecutionContext executionContext) throws ItemStreamException
    Store the current resource index and position in the resource.
    Specified by:
      `update` in interface `ItemStream`
    Overrides:
      `update` in class `ItemStreamSupport`
    Parameters:
      `executionContext` - to be updated
    Throws:
      `ItemStreamException`
    See Also:
      - `ItemStream.update(ExecutionContext)`

  - ### 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