弄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代碼
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLyFGdz9lbvNWavw1cldWYtl2Lc12bj5SZ5VGdp5CdtMXZtFmavw1LcpDc0RHaiojIsJye.png)
- #### 當'SQLPROFILER_CLIENT'啟用時:
- #### 1.必須為Log4jLogger
- #### 2.必須先運作對應RemoteHost上的sqlprofiler.jar,否則會報socket異常
- #specifies the appender to use for logging
- appender=com.p6spy.engine.logging.appender.Log4jLogger
- #appender=com.p6spy.engine.logging.appender.StdoutLogger
- #appender=com.p6spy.engine.logging.appender.FileLogger
- #...
- #...
- #### p6spy 輸出到 sqlprofiler 終端日志配置
- log4j.appender.SQLPROFILER_CLIENT=org.apache.log4j.net.SocketAppender
- # sqlprofiler 終端所在IP
- log4j.appender.SQLPROFILER_CLIENT.RemoteHost=localhost
- # sqlprofiler 終端所使用端口号
- log4j.appender.SQLPROFILER_CLIENT.Port=4445
- log4j.appender.SQLPROFILER_CLIENT.LocationInfo=true
- log4j.logger.p6spy=DEBUG, SQLPROFILER_CLIENT