首页 > 解决方案 > Spring batch JdbcCursorItemReader 导致内存不足的问题

问题描述

我正在使用 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批处理文档中,我们应该可以通过使用jdbcCursorItemReader来避免内存问题

标签: javaspring-batch

解决方案


您可以尝试使用JdbcPagingItemReader而不是 JdbcCursorItemReader 在配置时可以设置页面大小


推荐阅读