在 Hibernate 应用程序中使用 P6Spy 拦截数据库的 JDBC 语句
题
我正在开发一个休眠控制台应用程序并参考这篇文章 http://www.mkyong.com/hibernate/how-to-display-hibernate-sql-parameter-values-solution/ 设置 P6Spy 以查看 Hibernate 生成的 SQL 中“(?)”的实际值是多少。
设置应该可以正常工作,因为我可以在应用程序启动期间看到 P6Spy 输出的信息/调试消息。然而,此后,P6Spy 似乎无法拦截任何 JDBC 语句。从hibernate生成的日志(例如: Hibernate: insert into Module (projectName, moduleName, projectId) values (?, ?, ?)
),可以确定 JDBC 语句已经发送到数据库。
以下是我的设置:
休眠配置文件
- 已经指定使用P6Spy驱动程序:
<property name="hibernate.connection.driver_class">com.p6spy.engine.spy.P6SpyDriver</property>
- 已经打开了Hibernate.show_sql属性:
<property name="hibernate.show_sql">true</property>
间谍属性
- 已经更改为使用我的实际数据库JDBC驱动程序,过滤器设置为false,包括已明确设置为记录所有内容的false。
module.log=com.p6spy.engine.logging.P6LogFactory realdriver=oracle.jdbc.driver.OracleDriver filter=false dateformat=yyyy.MM.dd HH:mm:ss excludecategories= includecategories=error, info, batch, debug,statement,commit,rollback,result appender=com.p6spy.engine.logging.appender.StdoutLogger
我错过了什么重要的设置吗?
解决方案 3
最后我放弃了 P6Spy
因为它是旧库,最新版本可以追溯到2003年。我诉诸于使用另一个类似的免费开源软件 log4jdbc
要拦截 JDBC 语句,请参阅 这 如果您有兴趣,请了解更多信息。
其他提示
我从未使用过 P6Spy,但您可以将绑定变量输出到日志中。尝试将其放入 log4j.properties 或 xml 文件中。
log4j.category.org.hibernate.type=调试,控制台
此类问题的常见原因是 JDBC 驱动程序在 P6SpyDriver 之前加载。您可以通过在spy.properties 中设置deregisterdrivers=true 来解决此问题。
顺便说一句 - 这个问题已在 2.0-alpha-1 中修复。
不隶属于 StackOverflow