spring async не освобождает соединение с базой данных

Технический стек
Я использую spring boot 1.3.5 для службы отдыха, которая внутренне извлекает данные из базы данных. Используемый ORM - это JOOQ, а управление пулом соединений осуществляется BoneCP...

Требование
У меня есть требование, когда мне нужно запустить несколько sql для получения данных, объединить результат и вернуть их все вместе...

ПРОБЛЕМА
Я добился этого с помощью spring async, но столкнулся с проблемой, когда метод Spring Sync задерживает соединение с базой данных и не освобождает их в пул базы данных. После нескольких обращений достигается максимальное соединение и приложение перестает отвечать...

попробуйте
Как только я удаляю аннотацию @Async из своего метода, он работает нормально.

Пожалуйста, предложите возможное решение этой проблемы, когда мне нужно запустить несколько запросов и объединить результат. Также другое решение, если кто-то поможет мне, есть ли какие-либо настройки вbonecp, которые возвращают соединения в пул после тайм-аута.


person AutoMEta    schedule 19.07.2017    source источник
comment
В чем причина того, что метод весенней синхронизации задерживал соединение с базой данных? это длительные процессы?   -  person Zico    schedule 19.07.2017
comment
запрос выполняется недолго... но результат доставлен, но соединение с базой данных не возвращается обратно в пул   -  person AutoMEta    schedule 19.07.2017
comment
Разве вы не вызывали connection.close(), чтобы вернуть соединение с пулом после выполнения запросов?   -  person Zico    schedule 19.07.2017
comment
как уже упоминалось, я использую boncep с весенней загрузкой и, таким образом, открытие и закрытие соединения автоматически обрабатываются пулом базы данных. Я специально открываю соединение и, следовательно, не могу закрыть соединение.   -  person AutoMEta    schedule 21.07.2017


Ответы (1)


Рассмотрим следующие решения. Затем подумайте, что подойдет для вашего приложения.

  1. Увеличить лимит подключений в БД
  2. Уменьшите потоки @Async, чтобы уменьшить использование соединения
  3. Разработайте код блока @Async для использования определенного количества подключений из пула. Таким образом, остальные соединения останутся для другого использования для приложения.
person Zico    schedule 19.07.2017
comment
1. Увеличить лимит подключений в БД --› это не помогает, так как в какой-то момент лимит увеличивается. 2. Уменьшите потоки @Async, чтобы уменьшить использование соединения --> это всегда 3, нельзя уменьшить 3. Не знаю, как это сделать... любая помощь - person AutoMEta; 19.07.2017