Потоки результатов JPA и базовые соединения JDBC

#jpa #spring-data-jpa

#jpa #весна-данные-jpa

Вопрос:

Довольно очевидно, что происходит, когда вы вызываете getResultList() Query экземпляр — платформа получает соединение JDBC из пула и возвращает его, когда список будет готов.

Что мне непонятно, так это то, как JPA обрабатывает соединения во время getResultStream() вызовов. Ждет ли это, пока я дойду до конца потока, а затем верну соединение в пул? Что, если я этого не сделаю? Что, если я получу a Spliterator из потока и перестану повторять где-то посередине?

Мое единственное предположение состоит в том, что такие соединения возвращаются в пул после тайм-аута. Это означало бы, что в зависимости от значения тайм-аута мне может потребоваться гораздо большее значение открытых подключений к БД. Если я прав, как мне настроить значение тайм-аута, особенно в Spring JPA?

Ответ №1:

Ответ в том, что это не так. Предполагается, что вы должны обернуть возвращаемый поток в инструкцию «попробуйте с ресурсами».

Похоже, что многие люди не осознают, что Stream на самом деле AutoCloseable это так, и всякий раз, когда они используют такие ресурсы, как соединения JDBC или дескрипторы файлов, разработчик несет ответственность за их правильное закрытие.