簡體   English   中英

Spring Batch JdbcPagingItemReader分頁不起作用

[英]Spring Batch JdbcPagingItemReader paging not work

我使用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;
}

我指定的sortkey是表中的主鍵,它是一個字符串。 但是分頁無法正常工作。 但是它只讀取所有數據就不會引發任何錯誤。

在Spring Batch文檔中,它提供了一個使用int類型id作為排序關鍵字的示例,我想知道Spring Batch分頁只讀是否支持int類型排序關鍵字? 並且不能支持字符串排序鍵?

這是春季批處理的限制嗎?

它不是春季批處理的限制。 這就是數據庫的工作方式。 它根據其ascii值對字符串進行排序。

問題中的上面的代碼確實可以解決我的內存問題,但之所以不起作用,是因為我在春季批處理定義中仍然調用Cursor Reader。 這樣分頁閱讀器可以解決內存問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM