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.
Modifier and Type | Field and Description |
---|---|
protected org.apache.commons.logging.Log |
logger |
Constructor and Description |
---|
RepositoryItemReader() |
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
|
close, getCurrentItemCount, isSaveState, open, read, setCurrentItemCount, setMaxItemCount, setSaveState, update
getExecutionContextKey, setExecutionContextName, setName
public void setArguments(java.util.List<?> arguments)
arguments
- list of method arguments to be passed to the repositorypublic void setSort(java.util.Map<java.lang.String,org.springframework.data.domain.Sort.Direction> sorts)
sorts
- the fields to sort by and the directionspublic void setPageSize(int pageSize)
pageSize
- The number of items to retrieve per page.public void setRepository(org.springframework.data.repository.PagingAndSortingRepository<?,?> repository)
PagingAndSortingRepository
implementation used to read input from.repository
- underlying repository for input to be read from.public void setMethodName(java.lang.String methodName)
Pageable
as the last argument.methodName
- name of the method to invokepublic void afterPropertiesSet() throws java.lang.Exception
afterPropertiesSet
in interface org.springframework.beans.factory.InitializingBean
java.lang.Exception
protected T doRead() throws java.lang.Exception
AbstractItemCountingItemStreamItemReader
doRead
in class AbstractItemCountingItemStreamItemReader<T>
null
if the data source is exhaustedjava.lang.Exception
- Allows subclasses to throw checked exceptions for interpretation by the frameworkprotected void jumpToItem(int itemLastIndex) throws java.lang.Exception
AbstractItemCountingItemStreamItemReader
AbstractItemCountingItemStreamItemReader.doRead()
.jumpToItem
in class AbstractItemCountingItemStreamItemReader<T>
itemLastIndex
- index of item (0 based) to jump to.java.lang.Exception
- Allows subclasses to throw checked exceptions for interpretation by the frameworkprotected java.util.List<T> doPageRead() throws java.lang.Exception
java.lang.Exception
- Based on what the underlying method throws or related to the
calling of the methodprotected void doOpen() throws java.lang.Exception
AbstractItemCountingItemStreamItemReader
doOpen
in class AbstractItemCountingItemStreamItemReader<T>
java.lang.Exception
- Allows subclasses to throw checked exceptions for interpretation by the frameworkprotected void doClose() throws java.lang.Exception
AbstractItemCountingItemStreamItemReader
AbstractItemCountingItemStreamItemReader.doOpen()
.doClose
in class AbstractItemCountingItemStreamItemReader<T>
java.lang.Exception
- Allows subclasses to throw checked exceptions for interpretation by the framework