使用p6spy让hibernate打印真正的sql 去掉结果集resultset版.

由于公司项目架构使用hibernate,在调试程序的时候hibernate打印的sql都是带占位符的,不是最原始的sql语句,这对我们开发人员来说是很痛苦的一件事情.经过一番波折在网上找到了这么一个jar包,它的原理是:拦截最底层的jdbc连接,监控所有jdbc操作,所以说会影响性能,建议使用的童鞋在项目发布的时候最好把他替换回来.

jar包下载地址:http://download.csdn.net/detail/qq413041153/4177575


使用方法很简单:

1.如果你的datasource配置在hibernate或者spring的配置文件中,那么你需要将jar包放到编译路径下;如果你使用的是jndi之类的在tomcat配置文件里配置的数据源,那么就需要将jar放到tomcat的lib里面.提醒一句 :如果你这里是tomcar的jndi配置的话,需要删除tomcat工作目录项目内容,重新编译.


2.将数据源的classname替换成com.p6spy.engine.spy.P6SpyDriver,这个类会拦截你的数据库连接.


3.将spy.properties配置文件放到src根目录.(这里的src是指的你源码编译的初始根目录, 一般不改动的话就是src,有的项目如果需要多语版版本的可能是src/java是java源码src/c是别的源码,这时候你就要放到src/java下面).


4.找到realdriver把它的值改成你自己的数据库classname 我的是oracle,oracle.jdbc.driver.OracleDriver如果其他realdriver有打开的请注释掉.如果你需要使用多个数据源,可以对realdriver编号例如:


5.找到excludecategories这个是定义你不喜欢的输出信息,也就是说他的值将不会被输出到log或打印在控制台.可的值有: error, info, batch, debug, statement,commit, rollback, result, resultset.这里的resultset是请过修改源码后加上的官方是不支持屏蔽到这个属性的.


6.找到appender,这个是定义你的输出指向,是输出到log4j,还是控制台,还是文件.可选值分别是:

7.找到logfile,这个属性是定义你的log日志文件的存放位置.自己任意即可,如果你没选择输出到配置文件,其值默认即可.


8.找到append,这个属性是定义当你指定输出到文件的时候,是每次都追加到文件末尾还是每次覆盖,一般的都是追加吧 true即可.

最后说一下,p6spy官方现在已经找不到了,很旧没更新了,在文档里说是支持log4j的但是我调试了很久,
没能成功.不过我觉得这个功能可有可无,因为这个p6spy是有点耗费性能的 也就我们开发的时候用用,一般选
择输出到控制台就over了.Ok that's all.




你可能感兴趣的:(Hibernate)