:batch-asciidoc: ./
:toc: left
:toclevels: 4

[[listOfReadersAndWriters]]

[appendix]
== List of ItemReaders and ItemWriters

[[itemReadersAppendix]]

=== Item Readers

.Available Item Readers
[options="header"]
|===============
|Item Reader|Description
|AbstractItemCountingItemStreamItemReader|Abstract base class that provides basic
            restart capabilities by counting the number of items returned from
            an `ItemReader`.
|AggregateItemReader|An `ItemReader` that delivers a list as its
            item, storing up objects from the injected `ItemReader` until they
            are ready to be packed out as a collection. This `ItemReader` should
            mark the beginning and end of records with the constant values in
            `FieldSetMapper AggregateItemReader#__$$BEGIN_RECORD$$__` and
            `AggregateItemReader#__$$END_RECORD$$__`.
|AmqpItemReader|Given a Spring `AmqpTemplate`, it provides
            synchronous receive methods. The `receiveAndConvert()` method
            lets you receive POJO objects.
|FlatFileItemReader|Reads from a flat file. Includes `ItemStream`
            and `Skippable` functionality. See link:readersAndWriters.html#flatFileItemReader[`FlatFileItemReader`].
|HibernateCursorItemReader|Reads from a cursor based on an HQL query. See
            link:readersAndWriters.html#cursorBasedItemReaders[`Cursor-based ItemReaders`].
|HibernatePagingItemReader|Reads from a paginated HQL query
|ItemReaderAdapter|Adapts any class to the
            `ItemReader` interface.
|JdbcCursorItemReader|Reads from a database cursor via JDBC. See
            link:readersAndWriters.html#cursorBasedItemReaders[`Cursor-based ItemReaders`].
|JdbcPagingItemReader|Given an SQL statement, pages through the rows,
            such that large datasets can be read without running out of
            memory.
|JmsItemReader|Given a Spring `JmsOperations` object and a JMS
            Destination or destination name to which to send errors, provides items
            received through the injected `JmsOperations#receive()`
            method.
|JpaPagingItemReader|Given a JPQL statement, pages through the
            rows, such that large datasets can be read without running out of
            memory.
|ListItemReader|Provides the items from a list, one at a
            time.
|MongoItemReader|Given a `MongoOperations` object and a JSON-based MongoDB
            query, provides items received from the `MongoOperations#find()` method.
|Neo4jItemReader|Given a `Neo4jOperations` object and the components of a
            Cyhper query, items are returned as the result of the Neo4jOperations.query
            method.
|RepositoryItemReader|Given a Spring Data `PagingAndSortingRepository` object,
            a `Sort`, and the name of method to execute, returns items provided by the
            Spring Data repository implementation.
|StoredProcedureItemReader|Reads from a database cursor resulting from the
            execution of a database stored procedure. See link:readersAndWriters.html#StoredProcedureItemReader[`StoredProcedureItemReader`]
|StaxEventItemReader|Reads via StAX. see link:readersAndWriters.html#flatFileItemReader[`FlatFileItemReader`].

|===============


[[itemWritersAppendix]]


=== Item Writers

.Available Item Writers
[options="header"]
|===============
|Item Writer|Description
|AbstractItemStreamItemWriter|Abstract base class that combines the
            `ItemStream` and
            `ItemWriter` interfaces.
|AmqpItemWriter|Given a Spring `AmqpTemplate`, it provides
            for a synchronous `send` method. The `convertAndSend(Object)`
             method lets you send POJO objects.
|CompositeItemWriter|Passes an item to the `process` method of each
            in an injected `List` of `ItemWriter` objects.
|FlatFileItemWriter|Writes to a flat file. Includes `ItemStream` and
            Skippable functionality. See link:readersAndWriters.html#flatFileItemWriter[`FlatFileItemWriter`].
|GemfireItemWriter|Using a `GemfireOperations` object, items are either written
            or removed from the Gemfire instance based on the configuration of the delete
            flag.
|HibernateItemWriter|This item writer is Hibernate-session aware
            and handles some transaction-related work that a non-"hibernate-aware"
            item writer would not need to know about and then delegates
            to another item writer to do the actual writing.
|ItemWriterAdapter|Adapts any class to the
            `ItemWriter` interface.
|JdbcBatchItemWriter|Uses batching features from a
            `PreparedStatement`, if available, and can
            take rudimentary steps to locate a failure during a
            `flush`.
|JmsItemWriter|Using a `JmsOperations` object, items are written
            to the default queue through the `JmsOperations#convertAndSend()` method.
|JpaItemWriter|This item writer is JPA EntityManager-aware
            and handles some transaction-related work that a non-"JPA-aware"
            `ItemWriter` would not need to know about and
            then delegates to another writer to do the actual writing.
|MimeMessageItemWriter|Using Spring's `JavaMailSender`, items of type `MimeMessage`
            are sent as mail messages.
|MongoItemWriter|Given a `MongoOperations` object, items are written
            through the `MongoOperations.save(Object)` method.  The actual write is delayed
            until the last possible moment before the transaction commits.
|Neo4jItemWriter|Given a `Neo4jOperations` object, items are persisted through the
            `save(Object)` method or deleted through the `delete(Object)` per the
            `ItemWriter's` configuration
|PropertyExtractingDelegatingItemWriter|Extends `AbstractMethodInvokingDelegator`
            creating arguments on the fly. Arguments are created by retrieving
            the values from the fields in the item to be processed (through a
            `SpringBeanWrapper`), based on an injected array of field
            names.
|RepositoryItemWriter|Given a Spring Data `CrudRepository` implementation,
            items are saved through the method specified in the configuration.
|StaxEventItemWriter|Uses an `ObjectToXmlSerializer` implementation to
            convert each item to XML and then writes it to an XML file using
            StAX.

|===============
