пул загрузочных подключений с длительными запросами - PullRequest
0 голосов
/ 22 октября 2018

Когда запускается запрос весенней загрузки, он получает соединение из пула.Мой вопрос - это соединение остается связанным с потоком запроса (даже если он не выполняет какой-либо запрос) и возвращается в пул только после завершения запроса?

Например, если я делаю что-то вроде:

  1. Запрос запускается
  2. Выполнить запрос (20 мс)
  3. Вызов внешней службы http (1500 мс)
  4. Запрос завершен

Будет ли соединение, полученное этим потоком запросов, оставаться занятым потоком (и недоступным для других запросов) в течение 20 мс или 1520 мс?

PS: я использую Spring Boot 2.0 с HikariCP, и яне используется @ Transactional.

Спасибо.

1 Ответ

0 голосов
/ 23 октября 2018

В основном это зависит от того,

Если вы закроете соединение, оно будет возвращено обратно в пул и скоро будет готово в соответствии с конфигурацией (ниже), поэтому это будет ~ 20 мс (+ время, чтобы вернуться в пул)

Если вы не закроете соединение, оно будет ждать, пока конфигурация не разрешит это, если это позволит неопределенное время, теоретически это может вызвать утечку в вашем приложении и не вернуться в пул, пока приложение не будет отключено.

См. ответ о том, как Hikari обрабатывает возвращающиеся соединения в пул:

Хозяйка Hikari запускается каждые 30 секунд, что закрывает все неиспользуемые соединения, которые старше, чемmaxLifetime.Если число подключений превышает минимальное, простое экономка закрывает соединения, которые простаивали дольше, чем idleTimeout.

Подробнее о максимальное время жизни соединения :

по умолчанию Oracle не устанавливает максимальное время жизни для соединений (ни на стороне драйвера JDBC (1), ни на стороне сервера (2)).Таким образом, в этом отношении «ограничение времени подключения к инфраструктуре» составляет + бесконечность

...