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

时间:2012-11-30 10:20:18

标签: java spring jdbc jdbctemplate

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

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

2 个答案:

答案 0 :(得分:4)

这种问题非常巧妙地解决了。 P6Spy。有关如何使用Spring的good article

希望有所帮助。

答案 1 :(得分:2)

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