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

Java 收集所有发出的SQL的最简单方法,java,spring,jdbc,jdbctemplate,Java,Spring,Jdbc,Jdbctemplate,出于许多我不愿透露的原因(冗长乏味的故事),我需要捕获复杂应用程序与数据库的交互。该应用程序构建在Spring/JdbcTemplate之上,我需要找到该应用程序发送的所有SQL。我怎样才能以最简单的方式做到这一点 创建JdbcTemplate的伪模拟实现似乎不合理。首先,JdbcTemplate是一个类,而不是一个接口。其次,它有一个很大的接口,这使得实现起来很繁琐。我在考虑模仿DataSource和Connection来发送所有的SQL,但也许有一种更简单的方法可以做到这一点?捕获所有输出的

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


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

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

这类问题非常巧妙地解决了,例如。关于如何让它与Spring一起工作,有一个很好的解决方案


希望这能有所帮助。

如果我没记错的话,当设置Spring的loglevel进行调试时,它会将所有SQL语句写入logfileCorrect,但我需要它来进行回归测试。如果可能的话,我不希望我的回归测试基础设施依赖于日志输出。这就是我认为的,有道理。我测试了它,它工作得很好。杰出的我很高兴你救了我,让我不用再发明轮子了。干杯