收集所有发出的SQL的最简单方法

出于多种原因,我不想透露(冗长乏味的故事),我需要捕获复杂应用程序与数据库的交互。 该应用程序构建在Spring / JdbcTemplate之上,我需要找到该应用程序发出的所有SQL。 我怎么能以最简单的方式做到这一点?

创建JdbcTemplate的伪模拟实现似乎不合理。 首先,JdbcTemplate是一个类,而不是一个接口。 其次它有一个大的界面,使实施起来很繁琐。 我正在考虑模拟DataSourceConnection以获取所有SQL发送出去,但也许有一种更简单的方法可以做到这一点?

例如,这种问题非常巧妙地解决了。 P6Spy 。 有一篇关于如何使用Spring的好文章 。

希望有所帮助。

捕获所有SQL出去的唯一方法是成为应用程序和数据库之间的接触点。 这意味着,从实际处理JDBC交互的库实现中装饰DataSourceConnection和所有类型的Statement ,并记下在SimpleJdbcTemplate bean定义中指定的修饰数据源上在装饰连接上运行的所有语句。 从可维护性的角度来看,在任何其他方面捕获这一点都具有挑战性。