Я использую Spring Batch Framework для переноса данных. Читатель, который я использую, - JdbcCursorItemReader. Я установил размер фрагмента равным 500 и установил размер выборки считывателя равным 1000. Но при запуске службы с использованием пакетной пружины кажется, что все данные считываются один раз в памяти и заканчиваются из памяти. затем бросить память не хватает вопроса. Ниже, как я определяю читателя:
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;
}
Более того, из весеннего пакетного документа здесь мы сможем избежать проблемы с памятью, используя jdbcCursorItemReader