http://blog.csdn.net/blackwingzhong/article/details/3858356
开始进行配置的时候,主要是参考了俞黎敏的文章《监控和剖析数据库操作 -- P6Spy、SQL Profiler、IronTrack SQL 使用简介》和《为struts+spring+hibernate增加显示数据库操作语句功能》。
首先,把P6SPY集成到Spring中(使用的是c3p0):
- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
- <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
- <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/fangwang?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true"></property>
- <property name="user" value="root"></property>
- <property name="password" value="***"></property>
- </bean>
- <!-- 配置p6spy -->
- <bean id="myP6DataSource" class="com.p6spy.engine.spy.P6DataSource">
- <constructor-arg>
- <ref local="dataSource"/>
- </constructor-arg>
- </bean>
- <!-- Hibernate SessionFactory -->
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource">
- <ref local="myP6DataSource" /> <!-- 为p6spy修改了数据源, -->
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
- <prop key="hibernate.show_sql">true</prop>
- <prop key="hibernate.generate_statistics">true</prop>
- <prop key="hibernate.connection.release_mode">auto</prop>
- <prop key="hibernate.autoReconnect">true</prop>
- </props>
- </property>
- <property name="mappingDirectoryLocations">
- <list>
- <value>classpath:/com/china1819/pojo</value>
- </list>
- </property>
- </bean>
这种方法不同与俞黎敏那种。这样就可以优雅的把P6SPY集成到Spring当中。并不需要修改驱动程序,此外,也不用修改spy.properties文件中的realdriver部分了。但如果想把sql的log文件spy.log放到自己喜欢的地方,那么还是要修改:
logfile=c:/spy.log
上面的路径可以按照自己喜欢设置。
以上设置完成后,把p6spy.jar放到自己项目的web-inf/lib目录下,而spy.properties则放到web-inf/classes下。跟着启动tomcat,那么就可以看到spy.log文件中不断有sql语句被记录下来。
接着集成sqlprofiler。
下载好sqlprofiler并解压后,把sqlprofiler.jar放到web-inf/lib目录下,而sqlprofiler解压后目录下的spy.properties拷贝到web-inf/classes目录下覆盖掉上面的p6spy默认的spy.properties。同样,如果想把spy.log文件放到一个方便查看的地方,还是要修改sqlprofiler中复制到classes目录下的spy.properties文件,把 logfile=c:/spy.log 设置为自己需要的路径。
经过简单的配置,就把sqlprofiler集成好了,但是在启动项目之前,一定要先启动sqlprofiler:
打开命令行提示符,切换到项目的web-inf/lib目录下,运行:
java -jar sqlprofiler.jar
先启动程序,界面如下:
跟着,就可以启动tomcat,运行项目了。
集成irontracksql。
不知什么原因,irontrack的官方网站访问不了,幸亏俞同志的文章那里提供了irontrack的其它下载地址。可以从[这里下载]。
如果没有集成sqlprofiler,那么单纯集成irontracksql也是挺简单的,只要把irontracksql.jar复制到项目的web-inf/lib目录下,把irontracksql解压后文件夹下的spy.properties复制到web-inf/classes下面就行(spy.properties文件也可以放到tomcat/bin目录下,而非classes下,这样也可以正常工作。)。
这里需要注意的是,虽然irontracksql.jar复制到项目的web-inf/lib目录下了,但是要运行的并不是这个jar文件,在copy到lib目录下的同时,还有把它解压后的整个irontracksql文件夹copy到另外一个地方,例如:c:/,要启动的就是 c:/根目录下的sqlprofiler.jar。有些人单独把irontracksql.jar拷贝出来,再用:java -jar irontracksql.jar 命令来运行,就会报以下的错误:
- Exception in thread "main" java.lang.NoClassDefFoundError: com/incors/plaf/kunststoff/KunststoffLookAndFeel
- Caused by: java.lang.ClassNotFoundException: com.incors.plaf.kunststoff.KunststoffLookAndFeel
- at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
- at java.security.AccessController.doPrivileged(Native Method)
- at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
- at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
- at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
- at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
本来是打算在项目中同时集成sqlprofiler和irontracksql的,但发现这样有冲突,只好作罢。简单分析了一下原因,发现sqlprofiler和irontracksql解压后的各自带的spy.properties文件主要不同是使用的log4j appender不同。sqlprofiler使用的是:
appender=com.p6spy.engine.logging.appender.Log4jLogger
而irontracksql使用的是:
appender=com.p6spy.engine.logging.appender.FileLogger
而应该是只能有一个appender,所以,只能使用一个监控程序了。
下面列出两个appender的配置信息:
- #irontracksql的配置
- appender=com.p6spy.engine.logging.appender.FileLogger
- logfile = c:/spy.log
- append=true
- #The following are for log4j logging only
- log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
- log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
- log4j.appender.STDOUT.layout.ConversionPattern=p6spy - %m%n
- #sqlprofiler的配置
- appender=com.p6spy.engine.logging.appender.Log4jLogger
- append=true
- 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
- #log4j.logger.p6spy=INFO,STDOUT
- log4j.logger.p6spy=DEBUG, SQLPROFILER_CLIENT
-----------------------------------伟大的分割线--------------------------------------------------
本来以为sqlprofiler和irontracksql是无法共存的,一轮测试后,终于把他们集成到一起了。主要是修改spy.properties文件,其中核心的代码如下:
- #设置irontrack sql
- module.ibeam=com.irongrid.ibeam.server.IBeamFactory
- monitorport=2000
- #specifies the appender to use for logging
- appender=com.p6spy.engine.logging.appender.Log4jLogger
- #The following are for log4j logging only
- 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.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
- #log4j.logger.p6spy=INFO,STDOUT
- log4j.logger.p6spy=DEBUG,SQLPROFILER_CLIENT,STDOUT
主要修改是,使用appender=com.p6spy.engine.logging.appender.Log4jLogger而不是FileLogger,但这样设置后,logfile=.... 这个设置就没用了,因为它是真的file logger有效的。在启动tomcat的窗口中,只要看到 monitor port set to 2000,那么就说明irontracksql启动成功了。
这样,首先启动sqlprofiler,在启动项目,接着启动irontracksql,ok,都成功运行了,最后来张全家福: