【发布时间】:2012-12-07 20:23:46
【问题描述】:
我的假设
在我的理解中,Spring Batch 中的“面向块的处理”帮助我在单个事务中有效地处理多个项目。这包括有效使用来自外部系统的接口。由于外部通信包括开销,它也应该是有限的和面向块的。这就是为什么我们有ItemWriter 的提交级别。
所以我不明白的是,为什么ItemReader 仍然需要逐项阅读?为什么我也不能读取块?
问题描述
在我的步骤中,读者必须调用网络服务。并且作者会将这些信息发送到另一个网络服务。这就是为什么我不想尽可能少地拨打电话。
ItemWriter 的接口是面向块的——正如你肯定知道的那样:
public abstract void write(List<? extends T> paramList) throws Exception;
但ItemReader 不是:
public abstract T read() throws Exception;
作为一种解决方法,我实现了一个ChunkBufferingItemReader,它读取项目列表、存储它们并在调用其read() 方法时一个接一个地返回项目。
但是现在当涉及到异常处理和重新启动作业时,这种方法会变得混乱。我感觉我在这里工作,框架应该为我做这些工作。
问题
所以我错过了什么吗?我刚刚忽略的 Spring Batch 中是否有任何现有功能?
在another post 中,建议将ItemReader 的返回类型更改为List。但是我的ItemProcessor 将不得不从单个输入发出多个输出。这是正确的方法吗?
我很乐意接受任何最佳做法。在此先感谢:-)
【问题讨论】:
标签: spring-batch chunking