Package 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
  Description
  `MultiResourceItemWriter()`

- ## Method Summary

  Modifier and Type
  Method
  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(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 Details

  - ### MultiResourceItemWriter

    public MultiResourceItemWriter()

- ## Method Details

  - ### write

    public void write(List<? extends T> items) throws 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:
      `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)`