org.springframework.batch.item.data

## Class RepositoryItemReader<T>

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

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected org.apache.commons.logging.Log` | `logger`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `RepositoryItemReader()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `afterPropertiesSet()`
    `protected void` | `doClose()` Close the resources opened in `AbstractItemCountingItemStreamItemReader.doOpen()`.
    `protected void` | `doOpen()` Open resources necessary to start reading input.
    `protected java.util.List<T>` | `doPageRead()` Performs the actual reading of a page via the repository.
    `protected T` | `doRead()` Read next item from input.
    `protected void` | `jumpToItem(int itemLastIndex)` Move to the given item index.
    `void` | `setArguments(java.util.List<?> arguments)` Arguments to be passed to the data providing method.
    `void` | `setMethodName(java.lang.String methodName)` Specifies what method on the repository to call.
    `void` | `setPageSize(int pageSize)`
    `void` | `setRepository(org.springframework.data.repository.PagingAndSortingRepository<?,?> repository)` The `PagingAndSortingRepository` implementation used to read input from.
    `void` | `setSort(java.util.Map<java.lang.String,org.springframework.data.domain.Sort.Direction> sorts)` Provides ordering of the results so that order is maintained between paged queries

    - ### Methods inherited from class org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader

      `close, getCurrentItemCount, isSaveState, open, read, setCurrentItemCount, setMaxItemCount, setSaveState, update`

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

- - ### Field Detail

    - #### logger

          protected org.apache.commons.logging.Log logger

  - ### Constructor Detail

    - #### RepositoryItemReader

          public RepositoryItemReader()

  - ### Method Detail

    - #### setArguments

          public void setArguments(java.util.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(java.util.Map<java.lang.String,org.springframework.data.domain.Sort.Direction> sorts)

      Provides ordering of the results so that order is maintained between paged queries
      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.

    - #### 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(java.lang.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 java.lang.Exception

      Specified by:
        `afterPropertiesSet` in interface `org.springframework.beans.factory.InitializingBean`
      Throws:
        `java.lang.Exception`

    - #### doRead

          @Nullable
          protected T doRead()
                                throws java.lang.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:
        `java.lang.Exception` - Allows subclasses to throw checked exceptions for interpretation by the framework

    - #### jumpToItem

          protected void jumpToItem(int itemLastIndex)
                             throws java.lang.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:
        `java.lang.Exception` - Allows subclasses to throw checked exceptions for interpretation by the framework

    - #### doPageRead

          protected java.util.List<T> doPageRead()
                                          throws java.lang.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:
        `java.lang.Exception` - Based on what the underlying method throws or related to the calling of the method

    - #### doOpen

          protected void doOpen()
                         throws java.lang.Exception

      Description copied from class: `AbstractItemCountingItemStreamItemReader`
      Open resources necessary to start reading input.
      Specified by:
        `doOpen` in class `AbstractItemCountingItemStreamItemReader<T>`
      Throws:
        `java.lang.Exception` - Allows subclasses to throw checked exceptions for interpretation by the framework

    - #### doClose

          protected void doClose()
                          throws java.lang.Exception

      Description copied from class: `AbstractItemCountingItemStreamItemReader`
      Close the resources opened in `AbstractItemCountingItemStreamItemReader.doOpen()`.
      Specified by:
        `doClose` in class `AbstractItemCountingItemStreamItemReader<T>`
      Throws:
        `java.lang.Exception` - Allows subclasses to throw checked exceptions for interpretation by the framework