2

我们的项目使用 Spring + JPA + Hibernate + MYSQL。使用 EHCache、查询缓存和 c3p0 也是如此。

在代码中的某一时刻,我们为每个请求启动一个新事务。

就在离开创建事务的方法之前,我想获取在当前事务中访问数据库的查询数。

请指导我如何获取此信息。

4

2 回答 2

1

您将需要包装 JDBC 类(看看P6SPY)。你也可以通过编写一个环绕方面来实现类似的东西——你需要使用 aspectj,因为 spring aop 将无法将方面应用于不是 bean 的类。

一旦您能够在每个数据库调用上添加额外的逻辑,您就可以创建一个使用线程本地变量分别保存每个事务的计数的实现。

使用 spring事务同步 支持在事务完成时重置/记录统计信息。

于 2011-12-08T06:51:49.857 回答
0

Hibernate 支持统计并检查的使用情况。检查org.hibernate.stat.QueryStatistics.getExecutionCount()。但这给出了直到该点执行的所有查询的计数,因此您需要获取方法执行之前和执行之后的计数之间的差异。此外,您需要确保没有其他事务(例如石英计划作业)正在对 db 执行操作以获得准确的计数。

于 2011-12-08T08:39:32.757 回答