P6SPY、SQL Profiler结合使用

弄hibernate时,想显示sql语句,可以设置show_sql为true来达到这个目的,但是参数值全是像PreparedStatement一样,用?来代替的。 
用p6spy可以达到显示的那些参数原值的目的,但可读性差。可以利用SQL Profiler来处理这个事情。 
p6spy: http://sourceforge.net/projects/p6spy/ 
SQL Profile: http://sourceforge.net/projects/sqlprofiler/ 

p6spy安装: 
* 将p6spy.jar放到WEB-INF/lib目录下,将spy.properties放到WEB-INF/classes目录下。 
* 修改你 原有 JDBC Driver为:com.p6spy.engine.spy.P6SpyDriver 
* 修改 spy.properties 中的 realdriver 值为 原有 的JDBC Driver,比如我的是:com.mysql.jdbc.Driver 
* 完成,运行web server。 

我的日志记录产生在 %TOMCAT_HOME%\logs下,此log位置可以通过修改 logfile  = x:\**\*spy.log 来控制 
打开看看,看里面的日志是不是看起来比较不爽?下面我们安装SQL Profiler来让自已的视线爽一点。 

SQL Profiler安装:(须p6spy成功安装) 
* 将SQL Profiler自带的spy.properties覆盖原来的classes目录下文件 
* 修改现在spy.properties中realdriver 值为 原有 的JDBC Driver 
看后看看readme注意这几句 ^__^ : 
1. Start the GUI 
2. Start the webapp, in starts doing some JDBC requests we will ignore 
3. Press the "reset" button on the GUI 
4. Make a request to the webapp 
5. Press the "pause" button after the request has finished executing 
6. Press the "report" button to save profiling results as a CSV file 

* 我们先用java -jar sqlprofiler.jar 运行 sql profiler 
* 然后启动web server :-) 

一切尽在眼前了吧? 
当然,p6spy 和 sql profiler 能做的不止这些,sql profiler还能根据你的query来帮你生成建立合适的index功能等等。

详细配置 spy.properties 说明 
Java代码   收藏代码
  1. #### 当'SQLPROFILER_CLIENT'启用时:  
  2. ####   1.必须为Log4jLogger  
  3. ####   2.必须先运行对应RemoteHost上的sqlprofiler.jar,否则会报socket异常    
  4.   
  5. #specifies the appender to use for logging  
  6. appender=com.p6spy.engine.logging.appender.Log4jLogger  
  7. #appender=com.p6spy.engine.logging.appender.StdoutLogger  
  8. #appender=com.p6spy.engine.logging.appender.FileLogger  
  9.   
  10. #...  
  11. #...  
  12.   
  13. #### p6spy 输出到 sqlprofiler 终端日志配置   
  14. log4j.appender.SQLPROFILER_CLIENT=org.apache.log4j.net.SocketAppender  
  15. # sqlprofiler 终端所在IP  
  16. log4j.appender.SQLPROFILER_CLIENT.RemoteHost=localhost  
  17. # sqlprofiler 终端所使用端口号  
  18. log4j.appender.SQLPROFILER_CLIENT.Port=4445  
  19. log4j.appender.SQLPROFILER_CLIENT.LocationInfo=true  
  20.   
  21. log4j.logger.p6spy=DEBUG, SQLPROFILER_CLIENT  

你可能感兴趣的:(JAVA)