Задать вопрос
  • Неправильное поведение пула соединений в приложении Spring Boot - почему соединения не возвращаются?

    @spirit1984 Автор вопроса
    я разрешил эту проблему. Все дело было в настройки spring.jpa.open-in-view, которая по умолчанию в true и которая УДЕРЖИВАЕТ соединение после первого запроса в точке А. Выставление ее в false приводит к тому, что все летает.

    Подробнее здесь - https://www.baeldung.com/spring-open-session-in-vi...

    В целом, данная настройка кардинально противоречит духу виртуальных потоков (да и приложению без виртуальных потоков дольше) и фактически привязывает количество одновременно обрабатываемых запросов к количеству соединений в пуле.

    Представим, что у меня в пуле 50 соединений, и каждый запрос пользователя подразумевает вставку в базу за 1 мс и затем обращение к другому сайту по http, длящееся одну секунду. Тогда, по идее, за 1 секунду я должен уметь обслуживать 1000 пользователей (если вставки в таблицу лочат ее). Да, каждый пользователь будет ждать итоговый ответ 1 секунду из-за другого сайта, но получат его одновременно.

    Однако с таким вот подходом spring jpa все иначе, я за секунду обслужу ровно 50 человек, столько, сколько соединений в пуле, потому что соединения останутся висеть у сессий jpa, пока я не закончу с http обращениями. Даром что транзакцию я закоммитил и вроде как даже закрыл соединение сразу после вставки.
    Ответ написан
    Комментировать