Spring batch RepositoryItemReader正在跳过块

Spring batch RepositoryItemReader正在跳过块,spring-batch,Spring Batch,我使用RepositoryItemReader从数据库中读取记录,并使用面向块的方法处理这些记录。我使用100作为页面大小和提交间隔。 读卡器的查询在where条件下有“timestamp”,当100个块获得进程并提交时,该日期将通过块处理得到更新。我运行的问题是,假设我有986条记录,需要读取并更新大小为100(1-100)的数据块中的日期。所有第一次都按预期工作,但当它拾取第二个块时,它正在处理201-300,而不是意外的101-200。这种模式继续下去,第三次是501-600,以此类推。模

我使用RepositoryItemReader从数据库中读取记录,并使用面向块的方法处理这些记录。我使用100作为页面大小和提交间隔。 读卡器的查询在where条件下有“timestamp”,当100个块获得进程并提交时,该日期将通过块处理得到更新。我运行的问题是,假设我有986条记录,需要读取并更新大小为100(1-100)的数据块中的日期。所有第一次都按预期工作,但当它拾取第二个块时,它正在处理201-300,而不是意外的101-200。这种模式继续下去,第三次是501-600,以此类推。模式第一次跳过100次,第二次跳过200次,以此类推。是我的块更新和提交导致了这种情况吗?请告知如何修复此问题,以便它可以处理所有记录

Spring批处理版本:4.0.1.0版本

Code:
 @Autowired
    private MpImportRepository importRepo;
@Autowired
    JpaTransactionManager jpaTransactionManager;
   @Autowired
    private MpImportRepository importRepo;

 @Bean
    @StepScope
    public RepositoryItemReader<MpImport> importDataReader() {
           RepositoryItemReader<MpImport> reader = new RepositoryItemReader<>();
           reader.setPageSize(100);
           reader.setRepository(importRepo);
           reader.setMethodName("findAllImportedMissingPersons");
           reader.setSort(Collections.singletonMap("missingDate", Sort.Direction.ASC));
        return reader;
    }  

@Bean
    @Qualifier("mpDataExtractAndSaveToYrstJob")
    public Job mpDataExtractAndSaveToYrstJob() {
        return jobBuilderFactory.get("mpDataExtractAndSaveToYrstJob")               
                .incrementer(new RunIdIncrementer())
                .listener(jobCompletionListener)
                .flow(mpDataExtractAndSaveToYrstStep())
                .end().build();

 @Bean
    @Qualifier("mpDataExtractAndSaveToYrstStep")
    public Step mpDataExtractAndSaveToYrstStep() {
           return stepBuilderFactory.get("mpDataExtractAndSaveToYrstStep")
                   .<VMpHotfilesDailyExtract, MpImport> chunk(Integer.parseInt(100))
                   .reader(hotFilesReader())              
                   .processor(hotFilesProcessor())                   
                   .writer(importDataWriter())
                   .transactionManager(jpaTransactionManager)
                   .listener(mpdataExtractStepListener)
                   .listener(chunkCompletionListener)
                   .build();
    }   

 @Bean
    @StepScope
    public RepositoryItemWriter<MpImport> importDataWriter() {
        RepositoryItemWriter<MpImport> writer = new RepositoryItemWriter<>();
          writer.setRepository(importRepo);
          writer.setMethodName("save");
       return writer;
    }   
代码:
@自动连线
私有MpImportRepository importRepo;
@自动连线
JpaTransactionManager JpaTransactionManager;
@自动连线
私有MpImportRepository importRepo;
@豆子
@步进镜
public RepositoryItemReader importDataReader(){
RepositoryItemReader=新的RepositoryItemReader();
reader.setPageSize(100);
reader.setRepository(importRepo);
reader.setMethodName(“FindAllImportAdministringPersons”);
reader.setSort(Collections.singletonMap(“missingDate”、Sort.Direction.ASC));
返回读取器;
}  
@豆子
@限定符(“mpDataExtractAndSaveToYrstJob”)
公共作业mpDataExtractAndSaveToYrstJob(){
返回jobBuilderFactory.get(“mpDataExtractAndSaveToYrstJob”)
.incrementer(新的RunIdIncrementer())
.listener(jobCompletionListener)
.flow(mpDataExtractAndSaveToYrstStep())
.end().build();
@豆子
@限定符(“mpDataExtractAndSaveToYrstStep”)
公共步骤mpDataExtractAndSaveToYrstStep(){
返回stepBuilderFactory.get(“mpDataExtractAndSaveToYrstStep”)
.chunk(整数.parseInt(100))
.reader(hotFilesReader())
.processor(hotFilesProcessor())
.writer(importDataWriter())
.transactionManager(jpaTransactionManager)
.listener(mpdataExtractStepListener)
.listener(chunkCompletionListener)
.build();
}   
@豆子
@步进镜
public RepositoryItemWriter导入数据编写器(){
RepositoryItemWriter writer=新的RepositoryItemWriter();
writer.setRepository(importRepo);
writer.setMethodName(“保存”);
返回作者;
}   

发生这种情况可能是因为您在处理记录时更改了排序键。您是否尝试过不更新
时间戳
字段,并查看读卡器是否正确读取了所有记录?是的,我认为在运行时更改用于排序的数据是危险的。是的,我通过不更新时间戳进行了测试,所有操作都很好。So我正在写一个不更新时间戳的解决方案,看看如何进行。谢谢大家的建议/评论。