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).

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

    - #### afterPropertiesSet

          public void afterPropertiesSet()
                                  throws java.lang.Exception

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

    - #### doRead

          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:
        item
      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`

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