Pet*_*ann 5 chunking spring-batch
在我的理解中,Spring Batch中的"面向块的处理"帮助我在单个事务中有效地处理多个项目.这包括有效使用外部系统的接口.由于外部通信包括开销,因此它应该是有限的并且也是面向块的.这就是为什么我们有提交级别的原因ItemWriter.所以我没有得到的是,为什么ItemReader仍然必须逐项阅读?为什么我也不能读块呢?
在我的步骤中,读者必须调用web服务.作者将此信息发送到另一个Web服务.这就是为什么我不想做必要的电话.
接口ItemWriter是面向块的 - 正如您所知道的那样:
public abstract void write(List<? extends T> paramList) throws Exception;
Run Code Online (Sandbox Code Playgroud)
但事实ItemReader并非如此:
public abstract T read() throws Exception;
Run Code Online (Sandbox Code Playgroud)
作为一种解决方法,我实现了一个ChunkBufferingItemReader读取项目列表的方法,存储它们并在read()调用方法时逐个返回项目.
但是当谈到异常处理和现在重新开始工作时,这种方法变得混乱.我感觉我在这里工作,框架应该为我做.
我错过了什么吗?Spring Batch中是否存在任何现有功能?
在另一篇文章中,建议将a的返回类型更改ItemReader为a List.但是我ItemProcessor必须从单个输入发出多个输出.这是正确的方法吗?
我对任何最佳实践都很优雅.提前致谢 :-)
这是 read() 接口方法的实现草案。
public T read() throws Exception {
while (this.items.isEmpty()) {
final List<T> newItems = readChunk();
if (newItems == null) {
return null;
}
this.items.addAll(newItems);
}
return this.items.pop();
}
Run Code Online (Sandbox Code Playgroud)
请注意,这items是一个用于以块的形式读取且框架尚未请求的项目的缓冲区。
| 归档时间: |
|
| 查看次数: |
6591 次 |
| 最近记录: |