我正在使用RepositoryItemReader从数据库中读取记录,并使用面向块的方法处理这些记录。我正在使用100作为页面大小和提交间隔。 对读者的查询具有“时间戳记”,其中条件和该日期将在100个数据块得到处理并提交后通过数据块处理得到更新。我正在运行的问题是,假设我有986条需要读取的记录,并且需要以大小100(1-100)的块来更新日期。第一次都按预期运行,但是当它拾取第二个块时,它正在处理201-300,而不是意外的101-200。这种模式仍在继续,这是第三次提起501-600,依此类推。该模式是第一次跳过100次,第二次跳过200次,依此类推。我的更新和大块提交是否导致了这一点?请告知如何解决此问题,以便它可以处理所有记录。
春季批处理版本:4.0.1.RELEASE
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;
}