весенняя транзакция jpa количество запросов

Мы используем Spring + JPA + Hibernate + MYSQL для нашего проекта. Используя EHCache, кеш запросов и c3p0.

В какой-то момент кода мы начинаем новую транзакцию для каждого запроса.

Непосредственно перед выходом из метода, создавшего транзакцию, я хотел бы получить количество запросов, которые попали в базу данных в текущей транзакции.

Пожалуйста, помогите мне, как получить эту информацию.


person Abhilash L L    schedule 08.12.2011    source источник
comment
можно начать с чтения про перехватчики и аоп   -  person Satadru Biswas    schedule 08.12.2011


Ответы (2)


Вам нужно будет обернуть классы JDBC (взгляните на P6SPY). Вы также можете добиться чего-то подобного, написав аспект вокруг - вам нужно будет использовать аспект, поскольку Spring aop не сможет применять аспекты к классам, которые не являются bean-компонентами.

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

Используйте пружинную синхронизацию транзакций поддержка сброса/регистрации статистики после завершения транзакции.

person gkamal    schedule 08.12.2011

Hibernate поддерживает статистику. и проверьте это для использования. Проверьте org.hibernate.stat.QueryStatistics.getExecutionCount(). Но это дает количество всех запросов, выполненных до этого момента, поэтому вам нужно получить разницу между количеством до выполнения метода и после выполнения. Также вам необходимо убедиться, что никакая другая транзакция (например, запланированные задания кварца) не выполняет операцию на БД, чтобы получить точный подсчет.

person Adisesha    schedule 08.12.2011
comment
Невозможно использовать это как многопоточную систему, и большую часть времени у нас выполняется несколько запросов. - person Abhilash L L; 09.12.2011