61 lines
1.9 KiB
Plaintext
61 lines
1.9 KiB
Plaintext
[[chunkOrientedProcessing]]
|
|
= Chunk-oriented Processing
|
|
|
|
Spring Batch uses a "`chunk-oriented`" processing style in its most common
|
|
implementation. Chunk oriented processing refers to reading the data one at a time and
|
|
creating 'chunks' that are written out within a transaction boundary. Once the number of
|
|
items read equals the commit interval, the entire chunk is written out by the
|
|
`ItemWriter`, and then the transaction is committed. The following image shows the
|
|
process:
|
|
|
|
.Chunk-oriented Processing
|
|
image::chunk-oriented-processing.png[Chunk Oriented Processing, scaledwidth="60%"]
|
|
|
|
The following pseudo code shows the same concepts in a simplified form:
|
|
|
|
[source, java]
|
|
----
|
|
List items = new Arraylist();
|
|
for(int i = 0; i < commitInterval; i++){
|
|
Object item = itemReader.read();
|
|
if (item != null) {
|
|
items.add(item);
|
|
}
|
|
}
|
|
itemWriter.write(items);
|
|
----
|
|
|
|
You can also configure a chunk-oriented step with an optional `ItemProcessor`
|
|
to process items before passing them to the `ItemWriter`. The following image
|
|
shows the process when an `ItemProcessor` is registered in the step:
|
|
|
|
.Chunk-oriented Processing with Item Processor
|
|
image::chunk-oriented-processing-with-item-processor.png[Chunk Oriented Processing With Item Processor, scaledwidth="60%"]
|
|
|
|
The following pseudo code shows how this is implemented in a simplified form:
|
|
|
|
[source, java]
|
|
----
|
|
List items = new Arraylist();
|
|
for(int i = 0; i < commitInterval; i++){
|
|
Object item = itemReader.read();
|
|
if (item != null) {
|
|
items.add(item);
|
|
}
|
|
}
|
|
|
|
List processedItems = new Arraylist();
|
|
for(Object item: items){
|
|
Object processedItem = itemProcessor.process(item);
|
|
if (processedItem != null) {
|
|
processedItems.add(processedItem);
|
|
}
|
|
}
|
|
|
|
itemWriter.write(processedItems);
|
|
----
|
|
|
|
For more details about item processors and their use cases, see the
|
|
xref:processor.adoc[Item processing] section.
|
|
|