Spring Batch:如何在没有SortKeys的情况下配置PagingQueryProvider

时间:2019-01-30 14:05:04

标签: java spring-batch

我正在尝试配置JdbcPagingItemReader Bean,但我不完全知道表中各列的名称,因此我想知道是否存在一种无需排序键即可配置PagingQueryProvider的方法。

@Bean
public JdbcPagingItemReader<Map<String, Object>> pagingItemReader(DataSource dataSource){
    JdbcPagingItemReader<Map<String, Object>> itemReader = new JdbcPagingItemReader<>();
    itemReader.setDataSource(dataSource);
    itemReader.setQueryProvider(queryProvider());
    itemReader.setPageSize(1000);

    itemReader.setRowMapper(BatchConfiguration::rowMapper);

    return itemReader;
}


/* This configuration throws the exception
 * 'java.lang.IllegalArgumentException: sortKey must be specified'
 */
private MySqlPagingQueryProvider queryProvider(){
    MySqlPagingQueryProvider queryProvider = new MySqlPagingQueryProvider();
    queryProvider.setSelectClause("SELECT *");
    queryProvider.setFromClause("FROM "+ clientTableName);

    return queryProvider;
}

1 个答案:

答案 0 :(得分:0)

  

我想知道是否有一种无需排序键即可配置PagingQueryProvider的方法。

否,这是不可能的。 sortKey是构建SQL语句所必需的。以下是reference documentation的摘录:

  

SqlPagingQueryProviderFactoryBean要求您指定一个select子句和一个from子句。您还可以提供可选的where子句。这些子句和必需的sortKey 用于构建SQL语句。