我正在使用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来避免内存问题。
Partitioner
。 - soorapadman