Class 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

This writer will create an output file only when there are items to write, which means there would be no empty file created if no items are passed (for example when all items are filtered or skipped during the processing phase).

Author:
Robert Kasanicky, Mahmoud Ben Hassine
  • Constructor Details

    • MultiResourceItemWriter

      public MultiResourceItemWriter()
  • Method Details

    • write

      public void write(Chunk<? 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 - of items to be written. Must not be null.
      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 interface: ItemStream
      If any resources are needed for the stream to operate they need to be destroyed here. Once this method has been called all other methods (except open) may throw an exception.
      Throws:
      ItemStreamException
    • open

      public void open(ExecutionContext executionContext) throws ItemStreamException
      Description copied from interface: ItemStream
      Open the stream for the provided ExecutionContext.
      Parameters:
      executionContext - current step's ExecutionContext. Will be the executionContext from the last run of the step on a restart.
      Throws:
      ItemStreamException
    • update

      public void update(ExecutionContext executionContext) throws ItemStreamException
      Description copied from interface: ItemStream
      Indicates that the execution context provided during open is about to be saved. If any state is remaining, but has not been put in the context, it should be added here.
      Parameters:
      executionContext - to be updated
      Throws:
      ItemStreamException