我们需要计算Web应用程序针对每个请求发送到数据库的查询数(以及结果行数)。我们可以通过手动计数(每次调用JdbcTemplate.query*
,增加一个计数器)来轻松实现这一点,但是将来很容易忘记这会导致错误的结果。
是否可以将拦截器添加到JdbcTemplate或DataSource中来为我们做到这一点,或者是否可以使用H2之类的测试数据库来验证结果,以便至少证明其正确性?
答案 0 :(得分:0)
您可能想使用以下命令拦截JDBC驱动程序JDBCSpy。
功能
- 记录所有SQL语句的执行和迭代时间
- 识别多次执行的语句
- 所有列出的语句的深度可配置的堆栈跟踪
- 提供所有连接,SQL语句,结果集的统计信息
- 提供结果集的大小
- 提供一个API来检索所有统计信息
- 列出当前正在执行的所有语句
- 列出所有已执行但尚未关闭的语句
- 如果语句的执行时间超过了可配置的阈值,则通知(例如通过跟踪)
- 通知您是否忘记关闭结果集或在关闭连接之前的声明
- 支持不同的记录器(log4j,java记录器,slf等)
- 可由自定义侦听器扩展
该项目似乎不再得到积极维护,但它应该为您提供一个起点。通过拦截JDBC,您将确保无论查询如何执行,例如手动Connection
,JdbcTemplate
或JPA,所有查询都会被拦截。