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.InitializingBean
java.lang.Exception
InitializingBean.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 TaskExecutor
public 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 processedjava.lang.Exception
ItemProcessor.process(Object)