Как исправить «C3P0: PooledConnection, который уже сигнализировал об ошибке соединения, все еще используется» - PullRequest
0 голосов
/ 27 апреля 2018

У нас есть веб-приложение со стеком Spring, Hibernate, C3P0, Oracle DB Driver (за которым стоит Oracle DB). Время от времени мы сталкиваемся с блокировками блокировок в течение более длительного периода времени, которые затем уничтожаются на конце БД. (мы знаем, что это вызвано плохим дизайном приложения, и мы это исправим, но не в этом вопросе). После того как сеанс БД был уничтожен БД, кажется, что пул соединений повторно использует разорванное соединение, что приводит к ошибке:


A PooledConnection that has already signalled a Connection error is still in use!
Another error has occurred [ java.sql.SQLRecoverableException: Closed Connection ] which will not be reported to listeners!

В источнике данных мы настроили

dataSource.setTestConnectionOnCheckin(true);
dataSource.setTestConnectionOnCheckout(true);

Но это не помогло. Мы ожидали, что соединения не пройдут эти тесты, а затем обновятся. Но этого не происходит.

Есть ли у нас какие-либо советы, как воссоздать разорванные связи?

1 Ответ

0 голосов
/ 28 апреля 2018

Это предупреждение выдается, когда Connection, который является уже извлеченным , испытывает Exception, который заставляет c3p0 считать его недействительным (поэтому он не будет реинкорпорирован обратно в пул на close()), но Connection продолжает использоваться и снова испытывает Исключение. Это не нарушенные соединения в пуле. Они нарушены Connection s в использовании приложением. Поэтому тестирование их на кассе (или регистрации) ничего с ними не делает.

Чтобы избавиться от этого, вам нужно изучить обработку исключений в коде вашего приложения. Существуют ли обстоятельства, когда недопустимый Connection мог выбросить Exception, но этот Exception был пойман и Connection повторно использован?

Само предупреждение безвредно. Он просто говорит, что c3p0 уже знает, что Connection - это плохо, он не будет генерировать событие, чтобы сигнализировать об этом снова.

...