maven项目导入jar包
<dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> <version>3.7.0</version> </dependency>
编写P6SpyConfig类
package com.example.demo.P6Spy; import com.p6spy.engine.spy.P6DataSource; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import org.springframework.core.PriorityOrdered; import javax.sql.DataSource; @Configuration public class P6SpyConfig { /** * P6数据源包装, 打印SQL语句 */ @Bean public P6DataSourceBeanPostProcessor p6DataSourceBeanPostProcessor() { return new P6DataSourceBeanPostProcessor(); } class P6DataSourceBeanPostProcessor implements BeanPostProcessor, PriorityOrdered { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { return bean; } @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; } } }
配置spy.properties文件
# 是否自动刷新 默认 flase #autoflush=false # 日期格式 dateformat=yyyy-MM-dd HH:mm:ss # 监测属性配置文件是否进行重新加载 reloadproperties=true # 属性配置文件重新加载的时间间隔,单位:秒 默认60s reloadpropertiesinterval=60 # 使用日志系统记录sql appender=com.p6spy.engine.spy.appender.Slf4JLogger # 自定义日志打印 logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat customLogMessageFormat=%(executionTime)ms | %(sqlSingleLine) # date类型字段记录日志时使用的日期格式 默认dd-MMM-yy databaseDialectDateFormat=yyyy-MM-dd HH:mm:ss # boolean类型字段记录日志时使用的日期格式 默认boolean 可选值numeric databaseDialectBooleanFormat=boolean # 是否通过jmx暴露属性 默认true jmx=true # 是否开启日志过滤 默认false, 这项配置是否生效前提是配置了 include/exclude/sqlexpression filter=true # 过滤 Log 时所排除的表名列表,以逗号分隔 默认为空 exclude=Z020_LOG_RESOURCE,Z020_LOG_OPERATE # 配置记录Log例外 excludecategories=info,debug,result,batc,resultset
运行结果
成功打印了sql语句在控制台。