面向块的处理

Spring Batch 在其最常见的实现中采用“面向块”的处理风格。面向块的处理是指一次读取一条数据,并创建在事务边界内写出的“块”。一旦读取的项目数量等于提交间隔,整个块将由 ItemWriter 写出,然后提交事务。下图展示了该过程:spring-doc.cadn.net.cn

Chunk Oriented Processing
图 1. 面向块的处理

以下伪代码以简化形式展示了相同的概念:spring-doc.cadn.net.cn

List items = new Arraylist();
for(int i = 0; i < commitInterval; i++){
    Object item = itemReader.read();
    if (item != null) {
        items.add(item);
    }
}
itemWriter.write(items);

您还可以配置一个面向块的步骤,使用可选的 ItemProcessor 在将项传递给 ItemWriter 之前对其进行处理。下图展示了当步骤中注册了 ItemProcessor 时的处理流程:spring-doc.cadn.net.cn

Chunk Oriented Processing With Item Processor
图 2. 使用 Item Processor 的面向块处理

以下伪代码以简化形式展示了其实现方式:spring-doc.cadn.net.cn

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);

有关项处理器及其用例的更多详细信息,请参阅 项处理部分。spring-doc.cadn.net.cn