|
当前版本仍在开发中,尚不被视为稳定版本。最新稳定版请使用 Spring Batch 文档 6.0.2! |
面向块的处理
在最常见的实现方式中,Spring Batch 使用的是“面向块”的处理风格。
所谓面向块处理,是指一次读取一条数据,并将若干条数据组成一个“块”,
然后在同一个事务边界内将这一整块写出。当读取的数据项数量达到提交间隔时,
整个块就会由 ItemWriter 一次性写出,随后提交事务。下图展示了这一过程:
Figure 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. 带 ItemProcessor 的面向块处理
下面的伪代码展示了这一过程的简化实现方式:
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 及其使用场景的更多细节,可参见 Item 处理一节。