Class RepositoryItemReader<T>

All Implemented Interfaces:
ItemReader<T>, ItemStream, ItemStreamReader<T>, org.springframework.beans.factory.InitializingBean

public class RepositoryItemReader<T> extends AbstractItemCountingItemStreamItemReader<T> implements org.springframework.beans.factory.InitializingBean

A ItemReader that reads records utilizing a PagingAndSortingRepository.

Performance of the reader is dependent on the repository implementation, however setting a reasonably large page size and matching that to the commit interval should yield better performance.

The reader must be configured with a PagingAndSortingRepository, a Sort, and a pageSize greater than 0.

This implementation is thread-safe between calls to AbstractItemCountingItemStreamItemReader.open(ExecutionContext), but remember to use saveState=false if used in a multi-threaded client (no restart available).

It is important to note that this is a paging item reader and exceptions that are thrown while reading the page itself (mapping results to objects, etc in the doPageRead()) will not be skippable since this reader has no way of knowing if an exception should be skipped and therefore will continue to read the same page until the skip limit is exceeded.

NOTE: The RepositoryItemReader only reads Java Objects i.e. non primitives.

Since:
2.2
Author:
Michael Minella, Antoine Kapps, Mahmoud Ben Hassine
  • Field Details

    • logger

      protected org.apache.commons.logging.Log logger
  • Constructor Details

    • RepositoryItemReader

      public RepositoryItemReader()
  • Method Details

    • setArguments

      public void setArguments(List<?> arguments)
      Arguments to be passed to the data providing method.
      Parameters:
      arguments - list of method arguments to be passed to the repository
    • setSort

      public void setSort(Map<String,org.springframework.data.domain.Sort.Direction> sorts)
      Provides ordering of the results so that order is maintained between paged queries. Use a LinkedHashMap in case of multiple sort entries to keep the order.
      Parameters:
      sorts - the fields to sort by and the directions
    • setPageSize

      public void setPageSize(int pageSize)
      Parameters:
      pageSize - The number of items to retrieve per page. Must be greater than 0.
    • setRepository

      public void setRepository(org.springframework.data.repository.PagingAndSortingRepository<?,?> repository)
      The PagingAndSortingRepository implementation used to read input from.
      Parameters:
      repository - underlying repository for input to be read from.
    • setMethodName

      public void setMethodName(String methodName)
      Specifies what method on the repository to call. This method must take Pageable as the last argument.
      Parameters:
      methodName - name of the method to invoke
    • afterPropertiesSet

      public void afterPropertiesSet() throws Exception
      Specified by:
      afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
      Throws:
      Exception
    • doRead

      @Nullable protected T doRead() throws Exception
      Description copied from class: AbstractItemCountingItemStreamItemReader
      Read next item from input.
      Specified by:
      doRead in class AbstractItemCountingItemStreamItemReader<T>
      Returns:
      an item or null if the data source is exhausted
      Throws:
      Exception - Allows subclasses to throw checked exceptions for interpretation by the framework
    • jumpToItem

      protected void jumpToItem(int itemLastIndex) throws Exception
      Description copied from class: AbstractItemCountingItemStreamItemReader
      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 AbstractItemCountingItemStreamItemReader.doRead().
      Overrides:
      jumpToItem in class AbstractItemCountingItemStreamItemReader<T>
      Parameters:
      itemLastIndex - index of item (0 based) to jump to.
      Throws:
      Exception - Allows subclasses to throw checked exceptions for interpretation by the framework
    • doPageRead

      protected List<T> doPageRead() throws Exception
      Performs the actual reading of a page via the repository. Available for overriding as needed.
      Returns:
      the list of items that make up the page
      Throws:
      Exception - Based on what the underlying method throws or related to the calling of the method
    • doOpen

      protected void doOpen() throws Exception
      Description copied from class: AbstractItemCountingItemStreamItemReader
      Open resources necessary to start reading input.
      Specified by:
      doOpen in class AbstractItemCountingItemStreamItemReader<T>
      Throws:
      Exception - Allows subclasses to throw checked exceptions for interpretation by the framework
    • doClose

      protected void doClose() throws Exception
      Description copied from class: AbstractItemCountingItemStreamItemReader
      Specified by:
      doClose in class AbstractItemCountingItemStreamItemReader<T>
      Throws:
      Exception - Allows subclasses to throw checked exceptions for interpretation by the framework