收集所有发出的 SQL 的最简单方法
Posted
技术标签:
【中文标题】收集所有发出的 SQL 的最简单方法【英文标题】:simplest way to collect all SQL sent out 【发布时间】:2012-11-30 10:20:17 【问题描述】:由于许多我不愿透露的原因(冗长而无聊的故事),我需要捕捉复杂应用程序与数据库的交互。该应用程序构建在 Spring/JdbcTemplate 之上,我需要找到该应用程序发出的所有 SQL。我怎样才能以最简单的方式做到这一点?
创建 JdbcTemplate 的伪模拟实现似乎不合理。首先 JdbcTemplate 是一个类而不是一个接口。其次,它的接口很大,实现起来很乏味。我正在考虑模拟DataSource
和Connection
以发送所有SQL,但也许有更简单的方法可以做到这一点?
【问题讨论】:
如果我没记错的话,当 Spring 的 loglevel 设置为 DEBUG 时,它会将所有 SQL 语句写入日志文件 正确,但我需要这个来进行回归测试。如果可能的话,我不希望我的回归测试基础设施依赖于日志输出。 【参考方案1】:这种问题很巧妙地解决了例如。 P6Spy。有一个 good article 说明如何让它与 Spring 一起工作。
希望对您有所帮助。
【讨论】:
我测试了它,效果很好。优秀的!我很高兴你让我免于重新发明***。干杯!【参考方案2】:捕获所有发出的 SQL 的唯一方法是成为应用程序和数据库之间的接触点。这意味着,从实际处理 JDBC 交互的库实现中装饰 DataSource
、Connection
和所有类型的 Statement
s,并记下从指定的装饰数据源在装饰连接上运行的所有语句在SimpleJdbcTemplate
bean 定义中。从可维护性的角度来看,在其他任何时候捕捉到这一点都是具有挑战性的。
【讨论】:
这就是我的想法,有道理。以上是关于收集所有发出的 SQL 的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章
在 Flutter 中每 1 分钟发出一次定时 http.get 请求的最简单方法是啥?
组合不同(冗长)SQL 语句的列的最简单方法 - MSSQL