我从spring批处理文档中读取,它说读取器读取一行数据并将此行发送给处理器,当达到块大小时,写入器会将它们写入目标站点。 但是当我看到源代码时,这让我感到困惑。
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
Chunk<I> inputs = (Chunk)chunkContext.getAttribute("INPUTS");
if (inputs == null) {
inputs = this.chunkProvider.provide(contribution);
if (this.buffering) {
chunkContext.setAttribute("INPUTS", inputs);
}
}
this.chunkProcessor.process(contribution, inputs);
this.chunkProvider.postProcess(contribution, inputs);
}
在此类中,this.chunkProvider.provide(contribution)读取行并将其保存到输入中。输入的大小是多少?让我们看看provide方法。
public Chunk<I> provide(final StepContribution contribution) throws Exception {
final Chunk<I> inputs = new Chunk();
this.repeatOperations.iterate(new RepeatCallback() {
public RepeatStatus doInIteration(RepeatContext context) throws Exception {
Object item = null;
try {
item = SimpleChunkProvider.this.read(contribution, inputs);
} catch (SkipOverflowException var4) {
return RepeatStatus.FINISHED;
}
if (item == null) {
inputs.setEnd();
return RepeatStatus.FINISHED;
} else {
inputs.add(item);
contribution.incrementReadCount();
return RepeatStatus.CONTINUABLE;
}
}
});
return inputs;
}
如果SimpleChunkProvider.this.read(贡献,输入)读取了一行数据,但是this.repeatOperations.iterate将重复进行直到没有更多数据为止。
在这种情况下,输入将保存文件的所有数据,然后将它们发送到处理器?