самый простой способ собрать все отправленные SQL

По многим причинам, которые я предпочитаю не раскрывать (долгая и скучная история), мне нужно зафиксировать взаимодействие сложного приложения с БД. Приложение построено на основе Spring/JdbcTemplate, и мне нужно найти все SQL, отправленные этим приложением. Как я могу сделать это самым простым способом?

Создание псевдофиктивной реализации JdbcTemplate не кажется разумным. Во-первых, JdbcTemplate — это класс, а не интерфейс. Во-вторых, у него большой интерфейс, что делает его утомительным для реализации. Я думаю о том, чтобы издеваться над DataSource и Connection, чтобы отправить весь SQL, но, может быть, есть более простой способ сделать это?


person SkyWalker    schedule 30.11.2012    source источник
comment
Если я правильно помню, при установке уровня журнала Spring в DEBUG он будет записывать все операторы SQL в файл журнала.   -  person a_horse_with_no_name    schedule 30.11.2012
comment
Правильно, но мне это нужно для регрессионного тестирования. Я бы предпочел, чтобы моя инфраструктура регрессионного тестирования не полагалась на вывод журнала, если это возможно.   -  person SkyWalker    schedule 30.11.2012


Ответы (2)


Такого рода проблемы очень аккуратно решаются, например. P6Spy. Существует хорошая статья о том, как получить он работает с Spring.

Надеюсь, это поможет.

person Anders R. Bystrup    schedule 30.11.2012
comment
Я протестировал его, и он отлично работает. Отлично! Я очень рад, что вы избавили меня от необходимости изобретать велосипед. Ваше здоровье! - person SkyWalker; 30.11.2012

Единственный способ зафиксировать все исходящие запросы SQL — быть точкой соприкосновения между вашим приложением и базой данных. Это означает декорирование DataSource, Connection и всех типов Statement из реализации библиотеки, которая фактически обрабатывает взаимодействия JDBC, и записывать все операторы, выполняемые в вашем декорированном соединении из вашего декорированного источника данных, указанного в определении bean-компонента SimpleJdbcTemplate. Было бы сложно с точки зрения ремонтопригодности зафиксировать это в любой другой точке.

person Vikdor    schedule 30.11.2012
comment
Я так и думал, имеет смысл. - person SkyWalker; 30.11.2012