春季批处理:设置要为MultiResourceItemReader读取的项目的最大索引

时间:2018-07-10 08:41:41

标签: spring spring-batch

我正在使用MultiResourceItemReader通过FlatFileItemReader委托从源中读取* csv文件。

我的目的是尽可能读取所有数据,并基于所有数据训练模型。我不能限制块的大小和按分类训练模型。我只能限制读取数据的总数。

我该怎么做? FlatFileItemReader具有方法.setMaxItemCount(int count),该方法设置要读取的最大项目。但这适用于当前的阅读资源。当multy raeder开始读取新资源时,它会通过引起delegate.close();中的AbstractItemCountingItemStreamItemReader来关闭旧资源:

@Override
public void close() throws ItemStreamException {
    super.close();
    currentItemCount = 0;
    try {
        doClose();
    }
    catch (Exception e) {
        throw new ItemStreamException("Error while closing item reader", e);
    }
}

然后将currentItemCount设为零。所以它不适合我。

另一个想法是设置chunkSize。但是当达到块大小时如何停止读取?

当然,我可以通过适当的检查来扩展MultiResourceItemReader,设置maximumItemCount并覆盖read()函数。

但是我不敢相信MultiResourceItemReader没有机会限制要读取的项目。

请给我建议最好的方法。

谢谢!

1 个答案:

答案 0 :(得分:0)

要读取的最大项目数是委托的属性(每个资源),这就是为什么不能在MultiResourceItemReader本身上进行设置的原因。但我明白您的意思,您正在寻找一个针对所有资源的全局计数器。

为了实现这一点,我还建议使用全局计数器扩展MultiResourceItemReader,然后适当地重写read方法。