我正在尝试配置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;
}

最佳答案

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


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


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

关于java - Spring Batch:如何在没有SortKeys的情况下配置PagingQueryProvider,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54442415/

10-10 06:58