Class AsyncItemProcessor<I,O>

Type Parameters:
I - the input object type
O - the output object type (will be wrapped in a Future)
All Implemented Interfaces:
ItemProcessor<I,Future<O>>, org.springframework.beans.factory.InitializingBean

public class AsyncItemProcessor<I,O> extends Object implements ItemProcessor<I,Future<O>>, org.springframework.beans.factory.InitializingBean
An ItemProcessor that delegates to a nested processor and in the background. To allow for background processing the return value from the processor is a Future which needs to be unpacked before the item can be used by a client.

Because the Future is typically unwrapped in the ItemWriter, there are lifecycle and stats limitations (since the framework doesn't know what the result of the processor is). While not an exhaustive list, things like StepExecution.getFilterCount() will not reflect the number of filtered items and ItemProcessListener.onProcessError(Object, Exception) will not be called.

Dave Syer, Mahmoud Ben Hassine
See Also:
  • Constructor Details

    • AsyncItemProcessor

      public AsyncItemProcessor()
  • Method Details

    • afterPropertiesSet

      public void afterPropertiesSet() throws Exception
      Check mandatory properties (the setDelegate(ItemProcessor)).
      Specified by:
      afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
      See Also:
      • InitializingBean.afterPropertiesSet()
    • setDelegate

      public void setDelegate(ItemProcessor<I,O> delegate)
      The ItemProcessor to use to delegate processing to in a background thread.
      delegate - the ItemProcessor to use as a delegate
    • setTaskExecutor

      public void setTaskExecutor(org.springframework.core.task.TaskExecutor taskExecutor)
      The TaskExecutor to use to allow the item processing to proceed in the background. Defaults to a SyncTaskExecutor so no threads are created unless this is overridden.
      taskExecutor - a TaskExecutor
    • process

      @Nullable public Future<O> process(I item) throws Exception
      Transform the input by delegating to the provided item processor. The return value is wrapped in a Future so that clients can unpack it later.
      Specified by:
      process in interface ItemProcessor<I,O>
      item - to be processed, never null.
      potentially modified or new item for continued processing, null if processing of the provided item should not continue.
      Exception - thrown if exception occurs during processing.
      See Also: