在Spring Batch的documentation上,为了配置一个步骤,清晰的图片描述了如何执行读取过程和写入。有关面向块的步骤与现实的Spring批处理文档?
read
process
...
read
process
// until #amountOfReadsAndProcesses = commit interval
write
通讯(根据DOC):
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
...
read
// until #amountOfReads = commit interval
process
...
process
// until #amountOfProcesses = commit interval
write
那么文档是否错误?还是我错过了一些配置,使其行为像文档(没有发现任何东西)。
我遇到的问题是每个后续读取都取决于处理器的状态。读取器是一个组合,它可以并行读取两个源,具体取决于其中一个源中的读取项目,在一次读取操作期间只读取第一个,第二个或两个源。但是在处理器中读取哪些源的状态。目前唯一的解决方案是提交间隔1,这对于性能来说并不是最优的。
你可以试试它与自定义阅读器,它包装标准的阅读器和你的自定义逻辑 – 2014-10-30 15:37:43
是的我想过,但它不符合一批的模型。读者不负责创建输出。 – Juru 2014-10-31 06:37:19
我会尝试与源数据库表(第一批导入),并阅读数据与适当的SQL(第二批业务处理) – 2014-10-31 11:13:08