p6spy打印SQL
一 Springboot项目
1 <dependency> 2 <groupId>p6spy</groupId> 3 <artifactId>p6spy</artifactId> 4 <version>3.8.0</version> 5 </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的配置
1 <!-- https://github.com/brettwooldridge/HikariCP --> 2 <bean id="systemDataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close"> 3 <property name="driverClassName" value="${system.jdbc.driver}" /> 4 <property name="jdbcUrl" value="${system.jdbc.url}" /> 5 <property name="username" value="${system.jdbc.username}" /> 6 <property name="password" value="#{new String(T(java.util.Base64).getDecoder().decode('${system.jdbc.password}'.getBytes()))}" /> 7 8 <!-- 参考: https://blog.csdn.net/ggd628300/article/details/51758925 --> 9 <!-- 连接只读数据库时配置为true, 保证安全 --> 10 <property name="readOnly" value="false" /> 11 <!-- 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒 --> 12 <property name="connectionTimeout" value="30000" /> 13 <!-- 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟 --> 14 <property name="idleTimeout" value="600000" /> 15 <!-- 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒,参考MySQL wait_timeout参数(show variables like '%timeout%';) --> 16 <property name="maxLifetime" value="1800000" /> 17 <!-- 连接池中允许的最大连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count) --> 18 <!-- 浦发生产: 12C36G effective_spindle_count为有效磁盘数--> 19 <property name="maximumPoolSize" value="30" /> 20 21 </bean> 22 23 <!-- 3.代理的连接池,为了打印实际的SQL语句 --> 24 <bean id="dataSource" class="com.p6spy.engine.spy.P6DataSource"> 25 <constructor-arg name="delegate" ref="systemDataSource"/> 26 </bean>
p6spy是数据库动态监控的一种框架,它可以使得数据库数据无缝拦截和操作,而不必对现有应用程序的代码作任何修改。P6Spy分发包包括P6Log,它是一个可记录任何Java应用程序的所有JDBC事务的应用程序。其配置完成使用时,可以进行数据访问性能的监测。