gpt4 book ai didi

java - Spring Batch JdbcPagingItemReader 分页不起作用

转载 作者:行者123 更新时间:2023-12-02 10:05:22 28 4
gpt4 key购买 nike

我使用 Spring Batch 来做数据迁移工作。由于数据很多,所以我决定使用JdbcPagingItemReader来按页读取数据。以下是我如何定义读者:

private JdbcPagingItemReader<Map<String, Object>> buildItemReader(final DataSource dataSource, String tableName,
String tenant){

String tenantName = tenantHelper.determineTenant(tableName);

Map<String, Object> sqlParameterValues = new HashMap<>();
sqlParameterValues.put("tableName", tableName);
sqlParameterValues.put("tenantName", tenantName);
sqlParameterValues.put("tenant", tenant);

JdbcPagingItemReader<Map<String, Object>> itemReader = new JdbcPagingItemReader<>();
itemReader.setDataSource(dataSource);
itemReader.setPageSize(2);
itemReader.setFetchSize(2);
itemReader.setQueryProvider(generateSqlPagingQueryProvider(tableName,tenantName,tenant));
//itemReader.setParameterValues(sqlParameterValues);
itemReader.setRowMapper(new ColumnMapRowMapper());
try {
itemReader.afterPropertiesSet();
} catch (Exception e) {
e.printStackTrace();
}

return itemReader;
}

private PostgresPagingQueryProvider generateSqlPagingQueryProvider(String tableName, String tenantName,
String tenant) {
PostgresPagingQueryProvider provider = new PostgresPagingQueryProvider();
Map<String, Order> sortKeys = new LinkedHashMap<>();
String sortKey = getSortKeyBytable(tableName);
sortKeys.put(sortKey, Order.ASCENDING);

provider.setSelectClause("select *");
provider.setFromClause("from " + tableName);
provider.setWhereClause("where " + tenantName + " ='" + tenant + "'");
provider.setSortKeys(sortKeys);
return provider;
}

我指定的排序键是表中的主键,它是一个字符串。但分页没有按预期工作。但它不会抛出任何错误,它只是读取所有数据。

在Spring Batch文档中,提供了一个使用int类型id作为排序关键字的示例,我想知道Spring Batch分页读取是否只支持int类型排序关键字?并且不能支持字符串排序键?

这是 Spring Batch 的限制吗?

最佳答案

这不是 Spring Batch 的限制。这就是数据库的工作原理。它根据字符串的 ascii 值对字符串进行排序。

关于java - Spring Batch JdbcPagingItemReader 分页不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55369572/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com