В Spring Boot 2.7 результаты потоковой передачи обратно из запроса базы данных и обработки их партий с использованием JDBC очень проста: < /p>
Код: Выделить всё
try (PreparedStatement ps = conn.prepareStatement(MY_SQL)) {
ps.setFetchSize(100);
ResultSet rs = ps.executeQuery();
do {
List chunk = new ArrayList();
while (rs.next() && (rowsReadInThisBatch < myBatchSize)) {
MyEntity entity = new MyEntity();
myEntity.setSomeCol(rs.getLong("some_col");
myEntity.setSomeCol2(rs.getLong("some_col2");
chunk.add(entity)
rowsReadInThisBatch++;
}
// lost more code.
proccess(chunk);
writeBackToDB(cunk);
// lots more code
}while (rowsReadInThisBatch == myBatchSize);
Таблица базы данных имеет> 1 миллион строк, поэтому мы не можем просто прочитать их все в один объект 1 миллиона строк, так как наши серверы производственных микросервисов имеют только 1 ГБ оперативной памяти. Вместо этого вы должны использовать Lambdas и Java Streams.
Код: Выделить всё
try(Stream myStream = postRepository.streamByCreatedOnSince(yesterday)) {
myStream.forEach(
....
);
}
Как мне преобразовать мои простые старые петли Do и в то время как петли в потоки Java/лямбда, чтобы читать в кусках и кусочках, и не обрабатывать каждый за другим, без качества? В идеале не использовать встроенный код лямбда, который трудно проверить отдельно (и трудно понять для экспертов, не связанных с Java)?>
Подробнее здесь:
https://stackoverflow.com/questions/796 ... of-records