3

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 個の項目がスキップされます。理由はわかりません。

4

1 に答える 1

0

ロビン?あなたなの?

少し前にSpring Forumsに同じ質問を投稿しましたが、忘れていました。これが起こっている理由です:

プロセッサがフィールド cdrStatus を COMPLETED に変更していることを発見しました。そのようにして、リーダーが新しいページを要求し、制限とスキップを使用している場合、最初のページの変更されたレコードは新しいページ要求に含まれていないため、「新しい」最初のページはスキップされ、レコードは取得されませんでした。

それが期待される動作であるかどうかはわかりません。ここでスレッドを見つけることができます: http://forum.spring.io/forum/spring-projects/batch/129604-problems-with-mongoitemreader

于 2013-11-10T13:28:39.733 に答える