org.springframework.batch.item.file

## Class MultiResourceItemWriter<T>

- java.lang.Object
- - org.springframework.batch.item.ItemStreamSupport
  - - org.springframework.batch.item.support.AbstractItemStreamItemWriter<T>
    - - org.springframework.batch.item.file.MultiResourceItemWriter<T>

- Type Parameters:
    `T` - item type
  All Implemented Interfaces:
    ItemStream, ItemStreamWriter<T>, ItemWriter<T>

      public class MultiResourceItemWriter<T>
      extends AbstractItemStreamItemWriter<T>

  Wraps a `ResourceAwareItemWriterItemStream` and creates a new output resource when the count of items written in current resource exceeds `setItemCountLimitPerResource(int)`. Suffix creation can be customized with `setResourceSuffixCreator(ResourceSuffixCreator)`. Note that new resources are created only at chunk boundaries i.e. the number of items written into one resource is between the limit set by `setItemCountLimitPerResource(int)` and (limit + chunk size).
  Author:
    Robert Kasanicky

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `MultiResourceItemWriter()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `close()` No-op.
    `void` | `open(ExecutionContext executionContext)` No-op.
    `void` | `setDelegate(ResourceAwareItemWriterItemStream<? super T> delegate)` Delegate used for actual writing of the output.
    `void` | `setItemCountLimitPerResource(int itemCountLimitPerResource)` After this limit is exceeded the next chunk will be written into newly created resource.
    `void` | `setResource(org.springframework.core.io.Resource resource)` Prototype for output resources.
    `void` | `setResourceSuffixCreator(ResourceSuffixCreator suffixCreator)` Allows customization of the suffix of the created resources based on the index.
    `void` | `setSaveState(boolean saveState)` Indicates that the state of the reader will be saved after each commit.
    `void` | `update(ExecutionContext executionContext)` Return empty `ExecutionContext`.
    `void` | `write(java.util.List<? extends T> items)` Process the supplied data element.

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

- - ### Constructor Detail

    - #### MultiResourceItemWriter

          public MultiResourceItemWriter()

  - ### Method Detail

    - #### write

          public void write(java.util.List<? extends T> items)
                     throws java.lang.Exception

      Description copied from interface: `ItemWriter`
      Process the supplied data element. Will not be called with any null items in normal operation.
      Parameters:
        `items` - items to be written
      Throws:
        `java.lang.Exception` - if there are errors. The framework will catch the exception and convert or rethrow it as appropriate.

    - #### setResourceSuffixCreator

          public void setResourceSuffixCreator(ResourceSuffixCreator suffixCreator)

      Allows customization of the suffix of the created resources based on the index.
      Parameters:
        `suffixCreator` - `ResourceSuffixCreator` to be used by the writer.

    - #### setItemCountLimitPerResource

          public void setItemCountLimitPerResource(int itemCountLimitPerResource)

      After this limit is exceeded the next chunk will be written into newly created resource.
      Parameters:
        `itemCountLimitPerResource` - int item threshold used to determine when a new resource should be created.

    - #### setDelegate

          public void setDelegate(ResourceAwareItemWriterItemStream<? super T> delegate)

      Delegate used for actual writing of the output.
      Parameters:
        `delegate` - `ResourceAwareItemWriterItemStream` that will be used to write the output.

    - #### setResource

          public void setResource(org.springframework.core.io.Resource resource)

      Prototype for output resources. Actual output files will be created in the same directory and use the same name as this prototype with appended suffix (according to `setResourceSuffixCreator(ResourceSuffixCreator)`.
      Parameters:
        `resource` - The prototype resource.

    - #### setSaveState

          public void setSaveState(boolean saveState)

      Indicates that the state of the reader will be saved after each commit.
      Parameters:
        `saveState` - true the state is saved.

    - #### close

          public void close()
                     throws ItemStreamException

      Description copied from class: `ItemStreamSupport`
      No-op.
      Specified by:
        `close` in interface `ItemStream`
      Overrides:
        `close` in class `ItemStreamSupport`
      Throws:
        `ItemStreamException`
      See Also:
        `ItemStream.close()`

    - #### open

          public void open(ExecutionContext executionContext)
                    throws ItemStreamException

      Description copied from class: `ItemStreamSupport`
      No-op.
      Specified by:
        `open` in interface `ItemStream`
      Overrides:
        `open` in class `ItemStreamSupport`
      Parameters:
        `executionContext` - current step's `ExecutionContext`. Will be the executionContext from the last run of the step on a restart.
      Throws:
        `ItemStreamException`
      See Also:
        `ItemStream.open(ExecutionContext)`

    - #### update

          public void update(ExecutionContext executionContext)
                      throws ItemStreamException

      Description copied from class: `ItemStreamSupport`
      Return empty `ExecutionContext`.
      Specified by:
        `update` in interface `ItemStream`
      Overrides:
        `update` in class `ItemStreamSupport`
      Parameters:
        `executionContext` - to be updated
      Throws:
        `ItemStreamException`
      See Also:
        `ItemStream.update(ExecutionContext)`