Hibernate пул не обновляется в случае перезапуска базы данных в случае утечки соединения - PullRequest
0 голосов
/ 04 октября 2018

Я использую hibernate с пулом соединений c3p0 и использую базу данных PostgreSQL и настроил 100 макс. Соединение в пуле соединений

Сценарий: Suposse несколько потоков используют DBSessioFactory для получения соединения из опроса hibernate c3p0 и каждогопоток не закрывает соединение.

Таким образом, в каждом потоке есть утечка Соединения.Так что через некоторое время весь пул станет недоступным.Поскольку все пулы находятся в состоянии Busy, что также видно из jmx (jconsole).

Проблема: Теперь, в чем заключается моя проблема, даже если я перезапущу postgresql, хотя событие, показывающее занятые соединения, является спящим пулом в jconsole, равным 100.c3p0 / hibernate не понимает, что база данных была перезапущена, и он должен освободить это.

Как мне этого добиться?

1 Ответ

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

c3p0 не может знать, что Соединения, которые, насколько это касается, действительны и проверены, больше не работают из-за сброса БД.Проверенные соединения принадлежат клиентам, c3p0 обычно не связывается с ними.Лучшее, что можно сделать, это исправить утечки в соединении, чтобы этого не произошло.

Если вы не можете исправить утечки (просто исправьте утечки!), C3p0 предлагает ужасный обходной путь, его unreurnedConnectionTimeout .Вы можете установить тайм-аут дольше, чем когда-либо использовал бы действующий клиент, и c3p0 в конечном итоге будет очищать утечку соединений при превышении этого тайм-аута.

...