MongoItemReader で奇妙な問題が見つかりました。これは私がステップのために持っている設定です:
private Step addMnpInformation() throws Exception {
return stepBuilders.get("addMnpInformation")
.chunk(50)
.reader(stagedCdrReader())
.processor(addMnpProcessor())
.writer(stagedCdrWriter())
.build();
}
そしてこれがリーダー
@Bean
public MongoItemReader<StagedCdr> stagedCdrReader() throws Exception {
MongoItemReader reader = new MongoItemReader<StagedCdr>();
reader.setTemplate(stagingCdrTransactionManager);
reader.setQuery("{cdrStatus:'PENDING'}");
reader.setTargetType(StagedCdr.class);
HashMap<String,Direction> sort = new HashMap<String, Direction>();
sort.put("sequence", Direction.ASC);
reader.setSort(sort);
reader.setName("stagedCdrReader");
reader.afterPropertiesSet();
return reader;
}
読者は 1 ページおきに読んでいないようです。私が処理しているレコードにはシーケンシャル ID があり、50 ページ (おそらく私のチャンク サイズ) を使用してレコードを読み取っていることがわかりましたが、次のようになっています。
0 から 49 まで 100 から 149 まで 200 から 249 まで . . .
50 から 99 150 から 199 を読み取っていない
スキップされる項目の数は、チャンク プロパティによって異なります。たとえば、chunk(50) の場合、50 個の項目がスキップされます。理由はわかりません。