我正在使用Spring Batch框架进行数据迁移。我使用的读者是JdbcCursorItemReader。我将块大小设置为500,将读取器读取大小设置为1000。但是当使用spring batch运行服务时,它似乎只读取一次内存中的所有数据并用完了内存。然后抛出一个内存不足的问题。以下是我定义阅读器的方式:

   private JdbcCursorItemReader<Map<String, Object>> buildItemReader(final DataSource dataSource, String tableName,String tenant) {
        String tenantName = tenantHelper.determineTenant(tableName);
        JdbcCursorItemReader<Map<String, Object>> itemReader = new JdbcCursorItemReader<>();
        itemReader.setDataSource(dataSource);
        itemReader.setSql("select * from " + tableName + " where " + tenantName + " ='" + tenant + "'");
        itemReader.setRowMapper(new ColumnMapRowMapper());
        itemReader.setFetchSize(100);
        return itemReader;
    }

而且,从spring批处理文档here中,我们应该能够通过使用jdbcCursorItemReader来避免内存问题

最佳答案

您可以尝试使用JdbcPagingItemReader代替JdbcCursorItemReader,在配置页面大小的同时可以设置页面大小

09-05 10:55