【hibernate系列】採用p6spy+SQLProfiler完整顯示hibernate的S...


    雖然在hibernate中有show_sql選項,可是顯示出來的語句大多相似
    select * from xxx where value=?
    可是有時候咱們須要獲得完整的SQL語句,怎麼辦呢?使用P6SPY就能夠完成這個任務html

    p6spy是一個開源軟件,它能夠跟蹤任何使用jdbc的應用產生的數據庫操做。特別適合於監控ejb服務器產生的 sql statements。
    官方網址:http://www.p6spy.com/
    目前p6spy 適用的應用服務器包括jboss, atg, orion, jonas, iplanet, weblogic, websphere, resin and tomcat.java

下面我介紹一下p6spy在tomcat應用程序上安裝的步驟:
(1)http://www.p6spy.com/download.html,下載zip包
(2)解壓出p6spy.jar spy.properties兩個文件
(3)將p6spy.jar 放入應用程序的WEB-INF/lib目錄,將spy.properties放入WEB-INF/classes目錄
(4)修改spy.propertiesmysql

    realdriver  =com.mysql.jdbc.Driver  將這行前面的#去掉
    logfile     = c:/spy.log  修改一個你須要的日誌文件名
   
(5)修改hibernate.xml,修改connection.driver_class的值爲com.p6spy.engine.spy.P6SpyDriver
(6)重啓tomcat
(7)這樣在c:/下的spy.log記錄了數據庫的訪問狀況。web

 

 

用p6spy能夠達到顯示的那些參數原值的目的,但可讀性差。能夠利用SQL Profiler來處理這個事情。sql

解壓sqlprofiler-0.3-bin.zip,把spy.properties拷貝到項目中,覆蓋以前的spy.properties,要改的也只是realdriver,能夠看到配置文件中有log4j,這就須要咱們吧log4j的jar拷貝到應用中。

sqlprofiler.jar並不須要拷貝到應用中,他須要咱們來執行:
java -Xmx256m -jar sqlprofiler.jar數據庫



spy.properties片段:
log4j.appender.SQLPROFILER_CLIENT=org.apache.log4j.net.SocketAppender
log4j.appender.SQLPROFILER_CLIENT.RemoteHost=localhost
log4j.appender.SQLPROFILER_CLIENT.Port=4445
log4j.appender.SQLPROFILER_CLIENT.LocationInfo=true

p6spy 經過SocketAppender 向sqlprofiler發送日誌信息,sqlprofiler啓動後就開始監聽本機的4445端口,在應用中執行數據庫操做後就能夠在sqlprofiler的界面中看到sql語句的執行結果。
apache

最後一個須要注意的問題就是須要先啓動 SQLProfiler,此時狀態欄顯示P6SPY爲未鏈接狀態,而後再啓動應用程序或者 Tomcat 等應用服務器,應用運行後SQLProfiler狀態欄就會變爲鏈接狀態。這是由於 SQLProfiler 默認使用的是 Log4j 的 SocketAppender,因此要先啓動。不然,會因你的應用程序或應用服務器中的 Web 應用之類的因鏈接不到 Socket 的服務器(SQLProfiler 至關於 Socket 的服務器)而發生錯誤,能夠經過 SQL Profiler 控制界面最下面的鏈接狀態就能夠知道是否有程序鏈接上來。tomcat

相關文章
相關標籤/搜索