#jpa #spring-data-jpa
#jpa #весна-данные-jpa
Вопрос:
Довольно очевидно, что происходит, когда вы вызываете getResultList()
Query
экземпляр — платформа получает соединение JDBC из пула и возвращает его, когда список будет готов.
Что мне непонятно, так это то, как JPA обрабатывает соединения во время getResultStream()
вызовов. Ждет ли это, пока я дойду до конца потока, а затем верну соединение в пул? Что, если я этого не сделаю? Что, если я получу a Spliterator
из потока и перестану повторять где-то посередине?
Мое единственное предположение состоит в том, что такие соединения возвращаются в пул после тайм-аута. Это означало бы, что в зависимости от значения тайм-аута мне может потребоваться гораздо большее значение открытых подключений к БД. Если я прав, как мне настроить значение тайм-аута, особенно в Spring JPA?
Ответ №1:
Ответ в том, что это не так. Предполагается, что вы должны обернуть возвращаемый поток в инструкцию «попробуйте с ресурсами».
Похоже, что многие люди не осознают, что Stream
на самом деле AutoCloseable
это так, и всякий раз, когда они используют такие ресурсы, как соединения JDBC или дескрипторы файлов, разработчик несет ответственность за их правильное закрытие.