在批处理阅读器阅读器运行了几行之后,这些行将被发送到处理器

时间:2019-07-29 16:13:58

标签: spring-batch

我从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将重复进行直到没有更多数据为止。

在这种情况下,输入将保存文件的所有数据,然后将它们发送到处理器?

0 个答案:

没有答案