RepositoryItemReader跳过块

时间:2018-08-08 14:45:23

标签: spring-batch

我正在使用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;
    }   

0 个答案:

没有答案