我正在使用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,在配置页面大小的同时可以设置页面大小