Регистрация заимствования и возврата подключения
Я задал этот вопрос, чтобы дать свой ответ. Вероятно, не у многих людей есть эта проблема, но это была настоящая проблема - отследить код, который оставил соединения открытыми. Я собрал решение, описанное здесь, в небольшом проекте на github: https://github.com/chronakis/dbcp-conn-log. Вы можете пойти туда или продолжить, чтобы получить краткое описание здесь.
Похоже, что Tomcat DBCP не построил ведение журнала после проверки источника. Лучший способ, который я нашел, - это использовать AspectJ для создания метода ведения журнала вокруг методов, которые получают соединение из пула, и кода, который возвращает соединение с пулом. Методы ведения журнала печатают короткую удобную трассировку вызовов, которая показывает часть кода, которая открывает и возвращает соединения, как показано ниже:
+++ getConnection(52d02201): MyDAOSQL.getConnection(69) > MyDAOSQL.getCustomerByName(568) > ...
--- retConnection(52d02201): MyDAOSQL.getCustomerByName(568) > CustomerController.getCustomer(67) > ...
+++ getConnection(7100721a): MyDAOSQL.getConnection(69) > MyDAOSQL.getBasket(568) > ...
--- retConnection(7100721a): MyDAOSQL.getBasket(568) > CustomerController.getBasket(67) > ...
Предполагая, что вы используете java.sql.DataSource
в контексте xml, методы, которые получают и возвращают соединения:
Получить: org.apache.tomcat.dbcp.dbcp2.PoolingDataSource.getConnection
Возврат: org.apache.tomcat.dbcp.dbcp2.PoolingDataSource.PoolGuardConnectionWrapper.close
Зная это, несложно создать методы ведения журнала вокруг этих методов и скомпилировать их в код с помощью плагина AspectJ maven, как показано в проекте здесь: Я собрал эти файлы в небольшой проект на github: https://github.com/chronakis/dbcp-conn-log
Выходные данные инструмента ведения журнала позволяют легко определить, где в коде соединения не закрываются.
Регистрация фактической активности sql
Если вам нужны дополнительные подробности, вы можете использовать что-то вроде p6spy (поиск в github) для отслеживания уровня JDBC до запросов sql. Установить его, особенно с maven, довольно просто.
person
Yiannis
schedule
10.12.2015