p6spy打印SQL
阅读原文时间:2023年07月13日阅读:1

一 Springboot项目

   <dependency>  
         <groupId>p6spy</groupId>  
         <artifactId>p6spy</artifactId>  
         <version>3.8.0</version>  
     </dependency>

/**
* @author WGR
* @create 2019/9/7 -- 12:59
*/

/**
* 对数据源进行封装,打印运行sql
*/
@Configuration
public class P6spyConfig {

class P6DataSourceBeanPostProcessor implements BeanPostProcessor,Ordered {

    @Override  
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {  
        if (bean instanceof DataSource){  
            return new P6DataSource((DataSource) bean);  
        }  
        return bean;  
    }

    @Override  
    public int getOrder() {  
        return Ordered.LOWEST\_PRECEDENCE;  
    }  
}

@Bean  
public P6DataSourceBeanPostProcessor p6DataSource(){  
    return new P6DataSourceBeanPostProcessor();  
}

}

如果你是Boot项目,建议你这样包装数据源,在mybatisplus推荐,但是在测试过程中没有打印SQL,(现官网打不开)

二 SSM项目

  <dependency>  
        <groupId>p6spy</groupId>  
        <artifactId>p6spy</artifactId>  
        <version>3.8.0</version>  
    </dependency>

spy.properties的文件配置

# P6Spy\u7684\u914d\u7f6e,\u53c2\u8003\u5b98\u65b9\u6587\u6863

\u5b98\u65b9\u6587\u6863\u4f4d\u7f6e: http://p6spy.readthedocs.io/en/latest/configandusage.html#common-property-file-settings

\u57fa\u672c\u8bbe\u7f6e

autoflush=false
dateformat=yyyy-MM-dd HH:mm:ss
reloadproperties=true
reloadpropertiesinterval=60

\u5b9a\u5236\u5316\u8f93\u51fa

appender=com.p6spy.engine.spy.appender.Slf4JLogger
logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
customLogMessageFormat=%(executionTime)ms | %(sqlSingleLine)

\u6570\u636e\u5e93\u65e5\u671f,\u5e03\u5c14\u8bbe\u7f6e

databaseDialectDateFormat=yyyy-MM-dd HH:mm:ss
databaseDialectBooleanFormat=boolean

JMX\u8bbe\u7f6e

jmx=false

\u8fc7\u6ee4\u4e0d\u9700\u8981\u7684SQL\u8bed\u53e5

filter=true

\u6392\u9664\u7684\u8bed\u53e5\u7c7b\u578b

#excludecategories=info,debug,result,resultset,batch,commit,rollback
excludecategories=info,debug,result,resultset,batch,commit,rollback

xml的配置






     <!-- 参考: https://blog.csdn.net/ggd628300/article/details/51758925 -->  
     <!-- 连接只读数据库时配置为true, 保证安全 -->  
     <property name="readOnly" value="false" />  
     <!-- 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒 -->  
     <property name="connectionTimeout" value="30000" />  
     <!-- 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟 -->  
     <property name="idleTimeout" value="600000" />  
     <!-- 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒,参考MySQL wait\_timeout参数(show variables like '%timeout%';) -->  
     <property name="maxLifetime" value="1800000" />  
     <!-- 连接池中允许的最大连接数。缺省值:10;推荐的公式:((core\_count \* 2) + effective\_spindle\_count) -->  
     <!-- 浦发生产: 12C36G  effective\_spindle\_count为有效磁盘数-->  
     <property name="maximumPoolSize" value="30" />

 </bean>

 <!-- 3.代理的连接池,为了打印实际的SQL语句 -->  
 <bean id="dataSource" class="com.p6spy.engine.spy.P6DataSource">  
    <constructor-arg name="delegate" ref="systemDataSource"/>  
 </bean>

p6spy是数据库动态监控的一种框架,它可以使得数据库数据无缝拦截和操作,而不必对现有应用程序的代码作任何修改。P6Spy分发包包括P6Log,它是一个可记录任何Java应用程序的所有JDBC事务的应用程序。其配置完成使用时,可以进行数据访问性能的监测。

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器