p6spy介紹
本文轉載至http://www.cnblogs.com/xiziyin/archive/2009/12/21/1628921.html 西子吟
P6spy是什么?
P6Spy 是針對數據庫訪問操作的動態監測框架(為開源項目,項目首 頁:www.p6spy.com)它使得數據庫數據可無縫截取和操縱,而不必對現有應用程序的代碼作任何修改。P6Spy 分發包包括P6Log,它是一 個可記錄任何 Java 應用程序的所有JDBC事務的應用程序。其配置完成使用時,可以進行數據訪問性能的監測。
我們最需要的功能,查看sql語句,不是預編譯的帶問號的哦,而是真正的數據庫執行的sql,更直觀,更簡單。
下載地址:http://cid-6adab3222e64b22c.office.live.com/self.aspx/.Public/java/jar/p6spy-install.zip
需要準備什么?
我們最需要的是這些:
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
<bean id="dataSource" class="com.p6spy.engine.spy.P6DataSource"> <constructor-arg ref="dataSourceTarget"></constructor-arg> </bean>
這段表明了使用p6spy來監控sql,相當于一個代理的數據源,但是實際上引用的還是我們自己的真正的數據源,但是這里使用構造注入不太友好,呵呵。
4、 簡單執行demo
代碼
package p6spy; import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jdbc.core.JdbcTemplate; public class SqlDemo { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("p6spy/spring.xml"); JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate"); List list = jdbcTemplate.queryForList("select * from user where id=?", new Object[]{1}); System.out.println(list.size()); } }
其中包含一個帶參數的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的時候。。。