Код: Выделить всё
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);
< /code>
Таблица базы данных имеет> 1 миллион строк, поэтому мы не можем просто прочитать их все в один объект 1 миллиона строк, так как наши серверы производственных микросервисов имеют только 1 ГБ оперативной памяти. В приведенном выше примере у нас только когда -либо имели записи MyBatchSize в RAM, и нам нужно только сделать вставки Total/MyBatchSize в базу данных (не одна вставка для каждой записи, которая приведет к 1 миллиона поездок в DB)
для выполнения потоков в JPA, нет rs.next () Код: Выделить всё
try(Stream myStream = postRepository.streamByCreatedOnSince(yesterday)) {
myStream.forEach(
....
);
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... of-records