P6Spy是一個可以用來在應用程式中攔截和修改資料操作語句的開源架構。 通過P6Spy我們可以對SQL語句進行攔截,相當于一個SQL語句的記錄器,這樣我們可以用它來作相關的分析,比如性能分析。
P6SPY提供了如下幾個功能:
記錄SQL語句的執行時間戳。
記錄SQL語句類型
記錄SQL填入參數的和沒有填入參數的SQL語句
根據配置的時間控制SQL語句的執行時間,對超出時間的SQL語句輸出到日志檔案中
---------------------------------------------------------------------------------------
P6spy是什麼?
P6Spy 是針對資料庫通路操作的動态監測架構(為開源項目,項目首頁:www.p6spy.com)它使得資料庫資料可無縫截取和操縱,而不必對現有應用程式的代碼作任何修改。P6Spy 分發包包括P6Log,它是一個可記錄任何 Java 應用程式的所有JDBC事務的應用程式。其配置完成使用時,可以進行資料通路性能的監測。
我們最需要的功能,檢視sql語句,不是預編譯的帶問号的哦,而是真正的資料庫執行的sql,更直覺,更簡單。
目前最新的版本為1.3
需要準備什麼?
我們最需要的是這些:
Spy.properties是p6spy的配置檔案,裡面定義了類似log4j的日志格式,檔案路徑等。
P6spy.jar則是主要的jar檔案。

使用maven的可以直接加入p6spy依賴,但是spy.properties依舊得copy啦~
開始一個demo
1、 copy壓縮包裡的spy.properties到classpath下,你想敲也可以…………
2、 打開spy.properties,裡面比較重要的有
realdriver=org.gjt.mm.mysql.Driver
代表真正的資料庫驅動
上面有一些注釋的驅動,直接把#号去掉就可以,保留一個生效即可
我本地因為有一個mysql資料庫來測試,是以我使用mysql驅動
3、 簡單地使用spring的jdbc模闆來查詢,測試輸出的sql
這段表明了使用p6spy來監控sql,相當于一個代理的資料源,但是實際上引用的還是我們自己的真正的資料源,但是這裡使用構造注入不太友好,呵呵。
4、 簡單執行demo
代碼
其中包含一個帶參數的sql select * from user where id=?
成功運作後檢視日志,預設的檔案名為spy.log,會生成在項目根目錄下。
看看,是不是預編譯的sql和實際的sql都打出來了
如果出現
Warning: driver com.mysql.jdbc.Driver is a real driver in spy.properties, but it has been loaded before p6spy. p6spy will not wrap these connections. Either prevent the driver from loading, or try setting 'deregisterdrivers' to true in spy.properties
出現這句話的時候把deregisterdrivers=true
對于一個已經存在的工程,我們隻要做3步就可以了
1、 導入p6spy.jar包
2、 将工程的資料庫驅動換成相對應的p6spy驅動
3、 将spy.properties的真實驅動項指向你真正的驅動
Enjoy it……
這個包在測試的時候相當的友善,特别是調試sql的時候。。。