我们正在为我们的项目使用Spring + JPA + Hibernate + MYSQL。使用EHCache,查询缓存和c3p0。
在代码中的某一点,我们为每个请求启动一个新事务。
在离开创建交易的方法之前,我想得到 在当前事务中命中数据库的查询数。
请指导我如何获取此信息。
答案 0 :(得分:1)
您需要包装JDBC类(请查看P6SPY)。你也可以通过编写一个方面来实现类似的东西 - 你需要使用aspectj作为spring aop将无法将方面应用于非bean的类。
一旦你能够在每个数据库调用上添加额外的逻辑,你就可以创建一个实现,它使用线程本地来分别保存每个事务的计数。
使用spring transaction syncronization支持在事务完成时重置/记录统计信息。
答案 1 :(得分:0)
Hibernate支持statistics并检查this的使用情况。检查org.hibernate.stat.QueryStatistics.getExecutionCount()
。但是这会给出在该点之前执行的所有查询的计数,因此您需要在方法执行之前和执行之后获得计数之间的差异。此外,您还需要确保没有其他事务(例如石英预定作业)在db上执行操作以获得准确计数。