我的假设
据我了解,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 中是否有任何现有功能?
在另一篇文章中,建议将返回类型更改ItemReader
为 a List
。但是我ItemProcessor
将不得不从单个输入发出多个输出。这是正确的方法吗?
我很乐意接受任何最佳实践。提前致谢 :-)