Я использую jdbcTemplate для запроса к инструменту ETL, извлечения результатов и записи в рабочую таблицу Excel с использованием библиотеки Apache POI.У меня есть от 700 000 до 1 000 000 строк для выборки и записи.
Ранее у меня была следующая настройка:
jdbcTemplate.query(new CustomPreparedStatementCreator(arg), new ResultSetExtractor<Void>() {
@Override
public Void extractData(ResultSet rs) {
while (rs.next()) {... process sequentially ...}
// caused the connection to remain open for 650 seconds
// setFetchSize was not set so it was default
}
Теперь у меня есть следующая настройка:
jdbcTemplate.setFetchSize(200);
SqlRowSet srs = jdbcTemplate.queryForRowSet(sql);
// all the rows are fetched in 60 seconds into memory now
while (srs.next()) {... process sequentially ...} // still takes 600 seconds to write to the worksheet
Теперь мои проблемы:
- Как использовать API Java 8 parallelStream для обработки всех строк внутри объекта SqlRowSet?Есть ли альтернатива?
- Как быстрее написать на лист (org.apache.poi.xssf.streaming.SXSSFSheet)?