Цель моей функции - загрузить все данные из таблицы базы данных и отправить их один за другим клиенту через Grpc. Таблица базы данных огромна, и я не могу загрузить ее в память. Поэтому я думаю об использовании потока.
@Transactional
@Override
public void getAllData(DataRequest tradeDataRequest, StreamObserver<DataResponse> responseObserver) {
DataResponse.Builder builder = DataResponse.newBuilder();
try(Stream<Entity> entities = databaseRepository.getAll()) {
entities.map(DataResponse.Builder::build)
.forEach(dataResponse -> {
responseObserver.onNext(dataResponse);
});
}
}
Тем не менее, я получил исключение Heap вне памяти. Я не совсем понимаю, почему возникла исключительная причина потоковой передачи, если я не использую .collect(Collectors.toList())
.
Может кто-нибудь помочь мне понять это?