java - Spring 批处理 : How to configure PagingQueryProvider without a SortKeys

标签 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;
}

最佳答案

I'd like to know if there is a way to configure a PagingQueryProvider without a sort key.

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

The SqlPagingQueryProviderFactoryBean requires that you specify a select clause and a from clause. You can also provide an optional where clause. These clauses and the required sortKey are used to build an SQL statement.

关于java - Spring 批处理 : How to configure PagingQueryProvider without a SortKeys,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54442415/

相关文章:

java - 每次开发都需要清理项目吗?

java - 显示void类型的返回值

java - Spring批处理聚合值并写入单个值

grails - 如何在Grails项目的Spring Batch作业中配置监听器?

java - 如何获取 Spring Batch Integration 测试来加载我的应用程序属性?

java - 将 HibernateCursorItemReader 与 EntitymanagerFactory 结合使用

java - Swagger-ui.html 不显示 api 列表

java - 打开字符串/执行按钮操作

java - 按顺序安排动画

java - Spring 批处理中的重写 Bean 问题