在Spring Batch的documentation上配置步骤,清晰的图片描述了如何执行读取过程和写入。
read
process
...
read
process
// until #amountOfReadsAndProcesses = commit interval
write
对应(根据文件):
List items = new Arraylist();
for(int i = 0; i < commitInterval; i++){
Object item = itemReader.read()
Object processedItem = itemProcessor.process(item);
items.add(processedItem);
}
itemWriter.write(items);
然而,当我在读取器的read方法中调试并设置断点并在处理器的process方法中设置断点时,我看到以下行为:
read
...
read
// until #amountOfReads = commit interval
process
...
process
// until #amountOfProcesses = commit interval
write
文档错了吗?或者我错过了一些配置,使其表现得像文档(没有在那里找到任何东西)。
我遇到的问题是现在每个结果读取都取决于处理器的状态。读取器是并行读取两个源的复合,取决于其中一个源中的读取项,在一次读取操作期间仅读取第一个,第二个或两个源。但是要在处理器中进行读取的源的状态。目前唯一的解决方案是使用commit-interval 1,这对于性能来说并不是最佳的。
答案 0 :(得分:3)
简短的回答是,你是对的,我们的文档在分块模型上并不准确。这是需要更新的东西。有理由说明它的原因(它们主要与如何处理容错有关)。但这并不能解决您的问题。对于您的用例,有几个选项: