springbootbatch:对于db2数据源,分页似乎没有按预期工作

flseospp  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(182)

我一直在做spring引导批处理工作,从db2as400 sys中提取数据。在游戏结束时,预计要检索到的记录数量是100多万条,但目前我正在处理100000条记录中的一个较小的子集。我配置了一个 JdbcPagingItemReader 用一个 pageSize 40000和 fetchSize 10万。实现这一点的步骤是将数据分块成20000个数据块。当我将logging设置为trace时,我注意到查询是用 FETCH FIRST 40000 ROWS ONLY ,一开始我并不认为这是个问题,直到我注意到这项工作只检索了40000条记录,然后就结束了。我很可能不理解分页应该如何使用spring批处理,但我的假设是spring使用 fetchSize 作为每个查询要检索的总量,然后将其拆分为每个40000页,然后将其分块为每个块20000条记录。我的最终目标是处理所有100000条记录,保持一个高性能条。任何解释分页实际工作原理的帮助都是非常有用的。下面的代码示例。 Spring Boot v2.3.3 Spring Batch Core v4.2.4 Step Bean@Bean(name = "step-one") public Step stepOne(@Autowired JdbcPagingItemReader<MyPojo> pagingItemReader) { return stepBuilderFactory.get("step-one") .<Product.ProductBuilder, Product>chunk(chunkSize) .reader(pagingItemReader) .processor(itemProcessor) .writer(itemWriter) .taskExecutor(coreTaskExecutor) .listener(chunkListener) .allowStartIfComplete(true) .build(); }JdbcPagingItemReader Bean@StepScope @Bean(name = "PagingItemReader") public JdbcPagingItemReader<MyPojo> pagingItemReader(@Autowired PagingQueryProvider queryProvider) { return new JdbcPagingItemReaderBuilder<MyPojo>().name("paging-reader") .dataSource(dataSource) .queryProvider(queryProvider) .rowMapper(mapper) .pageSize(pageSize) .fetchSize(fetchSize) .saveState(false) .build(); }Properties ```

APPLICATION BATCH CONFIGURATION

application.batch.page-size=40000
application.batch.chunk-size=10000
application.batch.fetch-size=80000

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题