2013-08-29 4 views
2

У меня есть несколько мест в моем коде, которые неправильно закрывают подключения к базе данных. Это периодически сообщается в catalina.out с сообщениями, такими как: org.apache.commons.dbcp.AbandonedTrace $ AbandonedObjectException: объект DBCP, созданный в 2013-08-29 02:55:00 по следующему коду, не был закрыт. Эти сообщения повторяются для других незакрытых соединений в течение нескольких раз в течение нескольких часов.Пул соединений Tomcat и JDBC - Сроки для отчетности Unclosed Connections

Просмотрев другую информацию в catalina.out, я вижу, что эти сообщения были напечатаны в catalina.out около 7:40 утра. Я видел другие случаи, когда они сообщаются в Catalina.out на следующий день. Мой вопрос в том, что определяет, когда эти сообщения будут напечатаны на каталине. Как это работает?

ответ

4

DBCP - это с открытым исходным кодом, поэтому вы можете сами ознакомиться с кодом и узнать его. Способ, которым DBCP проверяет оставленные соединения, представляет собой форму совместной сборки мусора. Когда соединение выведено из пула соединений, оно сначала проверяет оставленные соединения и очищает их.

Так что если в течение нескольких часов не было запрошено никаких новых соединений, заброшенные соединения не будут удалены. И когда (например, в начале рабочего дня) из пула запрашивается соединение, он сначала удаляет все оставленные соединения.

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

 Смежные вопросы

  • Нет связанных вопросов^_^