java中使用P6Spy 打印sql

今天才发现原来还有 p6spy http://sourceforge.net/projects/p6spy 这么个东东,相见恨晚,想当年为自己基于jdbc手写了整个数据访问层的时候,还得意可提供完整的sql日志0134F62D

 

这里记一下spring配置:

 

Maven

首先maven 见http://mvnrepository.com/artifact/p6spy/p6spy/1.3

<dependency>
	<groupId>p6spy</groupId>
	<artifactId>p6spy</artifactId>
	<version>1.3</version>
</dependency>
            
配置spring:
<bean id="orginDataSource"
		class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="${database.jdbc.driverClassName}"/>
		<property name="url" value="${database.jdbc.url}"/>
		<property name="username" value="${database.jdbc.username}"/>
		<property name="password" value="${database.jdbc.password}"/>
				
		<property name="testWhileIdle" value="true"/>
		<property name="timeBetweenEvictionRunsMillis" value="3600000"/>
		<property name="validationQuery" value="SELECT 1"/>
		<property name="minEvictableIdleTimeMillis" value="18000000"/>
		<property name="testOnBorrow" value="true"/>
	</bean>
	
	<bean id="dataSource" class="com.p6spy.engine.spy.P6DataSource" >
        <constructor-arg>
            <ref local="orginDataSource"/>
        </constructor-arg>
    </bean>

 

 

我用的dbcp连接池,加入p6spy还是比较方便的。注意dataSource这个bean才是被注入到程序中的bean,它只是包装了orginDataSource这个bean。另外网上的配置都有destroy-method="close"这个,我看了下的包,p6spyDataSource这个类根本就没有close方法,不知是版本问题还是怎的。

 

最后配置spy.properties

https://code.google.com/p/p6spy-mvn/downloads/list 这里有例子,直接下下来放在/src/main/resources文件夹中

针对你的实际情况修改,这里我需要使用log4j日志

 

不需要realdriver这个配置,都可以注释掉,因为使用的是包装方式

#realdriver=oracle.jdbc.driver.OracleDriver

 

需要下面的配置

module.log=com.p6spy.engine.logging.P6LogFactory

appender=com.p6spy.engine.logging.appender.Log4jLogger

 

#这些配置和log4j是一样的

log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender

log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout

log4j.appender.STDOUT.layout.ConversionPattern=p6spy - %m%n

 

#可以使用系统变量的

log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender

log4j.appender.ROLLING_FILE.File=${conf}/xxx.log  
log4j.appender.ROLLING_FILE.Append=true  
log4j.appender.ROLLING_FILE.MaxFileSize=10000KB  
log4j.appender.ROLLING_FILE.MaxBackupIndex=10 
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout  
log4j.appender.ROLLING_FILE.layout.ConversionPattern=%5p [%d{yy-MM-dd HH:mm:ss,SSS}] [%t] - %m%n

 

log4j.logger.p6spy=INFO,STDOUT,ROLLING_FILE

 

好了,运行后就会发现类似输出:

INFO [13-02-21 14:30:50,906] [main] - 1361428250906|0|0|statement|select * from tbl_xxx where 1=1  and rpt = ? and id = ? and active = ?|select * from tbl_xxx where 1=1  and rpt = 'false' and id = '0' and active = 'true'

 

可见最后一个是实际的sql语句,不过这样有点麻烦,需要拖动横向滚动条才能看到,还是我的显示屏不够宽哈,01417DA2

 

 

另外可以使用工具来分析作为性能参考。

 

 

参见:

http://swik.net/Spring/Spring%27s+corner/Integrate+P6Spy+with+Spring/vq6

http://www.mkyong.com/hibernate/how-to-display-hibernate-sql-parameter-values-solution/

http://www.iteye.com/topic/28880


Total views.

© 2013 - 2024. All rights reserved.

Powered by Hydejack v6.6.1