Class AbstractItemCountingItemStreamItemReader<T>

java.lang.Object
org.springframework.batch.item.ItemStreamSupport
org.springframework.batch.item.support.AbstractItemStreamItemReader<T>
org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader<T>
All Implemented Interfaces:
ItemReader<T>, ItemStream, ItemStreamReader<T>
Direct Known Subclasses:
AbstractCursorItemReader, AbstractPaginatedDataItemReader, AbstractPagingItemReader, AvroItemReader, FlatFileItemReader, HibernateCursorItemReader, JpaCursorItemReader, JsonItemReader, LdifReader, MappingLdifReader, MongoCursorItemReader, RepositoryItemReader, StaxEventItemReader

public abstract class AbstractItemCountingItemStreamItemReader<T> extends AbstractItemStreamItemReader<T>
Abstract superclass for ItemReaders that supports restart by storing item count in the ExecutionContext (therefore requires item ordering to be preserved between runs).

Subclasses are inherently not thread-safe.

Author:
Robert Kasanicky, Glenn Renfro, Mahmoud Ben Hassine
  • Constructor Details

    • AbstractItemCountingItemStreamItemReader

      public AbstractItemCountingItemStreamItemReader()
  • Method Details

    • doRead

      @Nullable protected abstract T doRead() throws Exception
      Read next item from input.
      Returns:
      an item or null if the data source is exhausted
      Throws:
      Exception - Allows subclasses to throw checked exceptions for interpretation by the framework
    • doOpen

      protected abstract void doOpen() throws Exception
      Open resources necessary to start reading input.
      Throws:
      Exception - Allows subclasses to throw checked exceptions for interpretation by the framework
    • doClose

      protected abstract void doClose() throws Exception
      Close the resources opened in doOpen().
      Throws:
      Exception - Allows subclasses to throw checked exceptions for interpretation by the framework
    • jumpToItem

      protected void jumpToItem(int itemIndex) throws Exception
      Move to the given item index. Subclasses should override this method if there is a more efficient way of moving to given index than re-reading the input using doRead().
      Parameters:
      itemIndex - index of item (0 based) to jump to.
      Throws:
      Exception - Allows subclasses to throw checked exceptions for interpretation by the framework
    • read

      @Nullable public T read() throws Exception
      Description copied from interface: ItemReader
      Reads a piece of input data and advance to the next one. Implementations must return null at the end of the input data set. In a transactional setting, caller might get the same item twice from successive calls (or otherwise), if the first call was in a transaction that rolled back.
      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.
    • getCurrentItemCount

      public int getCurrentItemCount()
      Returns the current item count.
      Returns:
      the current item count
      Since:
      5.1
    • setCurrentItemCount

      public void setCurrentItemCount(int count)
      The index of the item to start reading from. If the ExecutionContext contains a key [name].read.count (where [name] is the name of this component) the value from the ExecutionContext will be used in preference.
      Parameters:
      count - the value of the current item count
      See Also:
    • setMaxItemCount

      public void setMaxItemCount(int count)
      The maximum index of the items to be read. If the ExecutionContext contains a key [name].read.count.max (where [name] is the name of this component) the value from the ExecutionContext will be used in preference.
      Parameters:
      count - the value of the maximum item count. count must be greater than zero.
      See Also:
    • close

      public void close() throws ItemStreamException
      Description copied from class: ItemStreamSupport
      No-op.
      Specified by:
      close in interface ItemStream
      Overrides:
      close in class ItemStreamSupport
      Throws:
      ItemStreamException
      See Also:
    • open

      public void open(ExecutionContext executionContext) throws ItemStreamException
      Description copied from class: ItemStreamSupport
      No-op.
      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:
    • update

      public void update(ExecutionContext executionContext) throws ItemStreamException
      Description copied from class: ItemStreamSupport
      Return empty ExecutionContext.
      Specified by:
      update in interface ItemStream
      Overrides:
      update in class ItemStreamSupport
      Parameters:
      executionContext - to be updated
      Throws:
      ItemStreamException
      See Also:
    • setSaveState

      public void setSaveState(boolean saveState)
      Set the flag that determines whether to save internal data for ExecutionContext. Only switch this to false if you don't want to save any state from this stream, and you don't need it to be restartable. Always set it to false if the reader is being used in a concurrent environment.
      Parameters:
      saveState - flag value (default true).
    • isSaveState

      public boolean isSaveState()
      The flag that determines whether to save internal state for restarts.
      Returns:
      true if the flag was set