首页 > 解决方案 > SpringBatch(JdbcPagingItemReader) 不获取所有行

问题描述

我有一个 springbatch 应用程序,但无法使用 JdbcPagingItemReader 获取所有行。

总行数:

select count(*) from web_view;

结果为 12057 行。

datasource.chunk.size=500
@Bean
public PagingQueryProvider pagingQueryProvider() {
    SqlServerPagingQueryProvider sqlServerPagingQueryProvider = new SqlServerPagingQueryProvider();
    Map<String, Order> sortKey = new HashMap<>();
    sortKey.put("type", Order.ASCENDING);
    sqlServerPagingQueryProvider.setSelectClause("select *");
    sqlServerPagingQueryProvider.setFromClause("from web_view");
    sqlServerPagingQueryProvider.setSortKeys(sortKey);
    return sqlServerPagingQueryProvider;
}

@Bean
public JdbcPagingItemReader<Web> jdbcPagingItemReader() throws Exception {
    return new JdbcPagingItemReaderBuilder<Web>()
            .name("jdbcPagingItemReader")
            .dataSource(dataSource())
            .queryProvider(pagingQueryProvider())
            .rowMapper(new BeanPropertyRowMapper<>(Web.class))
            .pageSize(chunkSize)
            .saveState(true)
            .build();
}

@Bean
public Job importUserJob(JobCompletionNotificationListener jobCompletionNotificationListener, Step step1) {
    return jobBuilderFactory.get("migrateWebJob")
            .incrementer(new RunIdIncrementer())
            .listener(jobCompletionNotificationListener)
            .flow(step1)
            .end()
            .build();
}
@Bean
public Step step1() throws Exception {
    return stepBuilderFactory.get("step1")
            .<Web, WebStore>chunk(chunkSize)
            .reader(jdbcPagingItemReader())
            .processor(webStoreItemProcessor())
            .writer(eventHubItemWriter())
            .build();
}

它在第 3 次分页后优雅地停止,仅处理 12057 行中的 1500 行。

标签: sql-server-2012spring-batch

解决方案


字段键类型的提取工作。

OraclePagingQueryProvider queryProvider = new OraclePagingQueryProvider();
queryProvider.setSelectClause("*");
queryProvider.setFromClause("from MEMENTO_REQUEST");

Map<String, Order> sortKeys = new HashMap<>(1);

sortKeys.put("PROG_REQUEST_ID", Order.ASCENDING);

如果您对不是 PK 的字段进行排序,则获取比表中的所有记录次要


推荐阅读