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;
}

似乎读者没有阅读其他页面。我正在处理的记录有一个顺序 ID,我发现它正在使用 50 页(可能是我的块大小)读取记录,但是以这种方式:

从 0 到 49 从 100 到 149 从 200 到 249 。. .

从 150 到 199 的读数不是从 50 到 99

跳过多少项目取决于块属性,例如块(50),那么将跳过50个项目,我不知道为什么!

4

1 回答 1

0

罗宾?那是你吗?

前段时间我在 Spring 论坛上发布了同样的问题,但忘记了。这就是它发生的原因:

我发现处理器正在将字段 cdrStatus 更改为 COMPLETED。这样,当阅读器请求新页面并且它使用限制和跳过时,第一页的更改记录未包含在新页面请求中,因此“新”第一页被跳过并且不检索记录。

我不知道这是否是预期的行为。你可以在这里找到线程:http: //forum.spring.io/forum/spring-projects/batch/129604-problems-with-mongoitemreader

于 2013-11-10T13:28:39.733 回答