在 Java 中记录堆栈跟踪:
new Throwable.printStackTrace()
要查看 Hibernate 发出的 SQL 语句,请将 show_sql 设置为 true。
但是,如何在每次发出 SQL 查询时记录堆栈跟踪?我想用它来监控性能(即找出我们源代码的哪些部分产生最多的查询)。
我查看了拦截器和事件侦听器,它们似乎都没有在查询级别提供挂钩。
我还浏览了源代码(SQLStatementLogger、Loader)。我没有看到任何钩子。
我也许可以尝试使用日志记录 jdbc 驱动程序,但我不清楚调用者的堆栈是否会被正确保留。
我可以重写字节码,但这似乎太过分了。
编辑:我也可以尝试AspectJ来建议 SQL 执行方法。
有人做过吗?最好的方法是什么?