I - the input object typeO - the output object type (will be wrapped in a Future)public class AsyncItemProcessor<I,O> extends java.lang.Object implements ItemProcessor<I,java.util.concurrent.Future<O>>, org.springframework.beans.factory.InitializingBean
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.filterCount will not reflect the number of filtered items
and ItemProcessListener.onProcessError(Object, Exception)
will not be called.AsyncItemWriter| Constructor and Description |
|---|
AsyncItemProcessor() |
| Modifier and Type | Method and Description |
|---|---|
void |
afterPropertiesSet()
Check mandatory properties (the
setDelegate(ItemProcessor)). |
java.util.concurrent.Future<O> |
process(I item)
Transform the input by delegating to the provided item processor.
|
void |
setDelegate(ItemProcessor<I,O> delegate)
The
ItemProcessor to use to delegate processing to in a
background thread. |
void |
setTaskExecutor(org.springframework.core.task.TaskExecutor taskExecutor)
The
TaskExecutor to use to allow the item processing to proceed
in the background. |
public void afterPropertiesSet()
throws java.lang.Exception
setDelegate(ItemProcessor)).afterPropertiesSet in interface org.springframework.beans.factory.InitializingBeanjava.lang.ExceptionInitializingBean.afterPropertiesSet()public void setDelegate(ItemProcessor<I,O> delegate)
ItemProcessor to use to delegate processing to in a
background thread.delegate - the ItemProcessor to use as a delegatepublic void setTaskExecutor(org.springframework.core.task.TaskExecutor taskExecutor)
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 TaskExecutorpublic java.util.concurrent.Future<O> process(I item) throws java.lang.Exception
Future so that clients can unpack it
later.process in interface ItemProcessor<I,java.util.concurrent.Future<O>>item - to be processednull if processing of the
provided item should not continue.java.lang.Exception - thrown if exception occurs during processing.ItemProcessor.process(Object)