面向块的处理
Spring Batch 在其最常见的实现中使用了“面向块(chunk-oriented)”的处理方式。面向块的处理是指一次读取一条数据,并创建在事务边界内写入的“块(chunk)”。一旦读取的项目数量达到提交间隔,整个块将由 ItemWriter
写入,然后事务被提交。下图展示了该过程:

图 1. 面向块的处理
以下伪代码以简化形式展示了相同的概念:
List items = new Arraylist();
for(int i = 0; i < commitInterval; i++){
Object item = itemReader.read();
if (item != null) {
items.add(item);
}
}
itemWriter.write(items);
您还可以为面向块的 Step 配置一个可选的 ItemProcessor
,用于在将项目传递给 ItemWriter
之前对其进行处理。下图展示了在 Step 中注册 ItemProcessor
时的过程:

图 2. 使用 Item Processor 的面向块的处理
以下伪代码以简化形式展示了其实现方式:
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);
有关 Item Processor 及其用例的更多详细信息,请参阅项目处理部分。