需求
maven依赖
p6spy
p6spy
3.8.7
com.google.guava
guava
28.2-jre
org.springframework.boot
spring-boot-starter-data-jpa
org.springframework.boot
spring-boot-starter-web
mysql
mysql-connector-java
runtime
org.projectlombok
lombok
true
打印sql
配置要点:
驱动配置 application.properties
spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver
spring.datasource.url=jdbc:p6spy:mysql://localhost:3306/demo_datasource
psy配置
# 单行日志
logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat
# 使用Slf4J记录sql
appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准,单位秒
outagedetectioninterval=2
aop打印持久层执行时间
使用aop实现;
package com.springbootpractice.demo.p6spy.aop;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.util.StopWatch;
/**
* 说明:aop配置
* @author carter
* 创建时间: 2020年02月16日 8:49 下午
**/
@Aspect
@Component
@Slf4j
public class PrintTimeCostAspectJConfig {
@SneakyThrows
@Around("myPointCut()")
public Object around(ProceedingJoinPoint pj) {
Object res = null;
String methodName = pj.getSignature().toShortString();
StopWatch stopWatch = new StopWatch(methodName);
stopWatch.start();
try {
res = pj.proceed();
} catch (Throwable ex) {
throw ex;
} finally {
stopWatch.stop();
log.warn("{}执行耗时{}毫秒", methodName, stopWatch.getTotalTimeMillis());
}
return res;
}
@Pointcut("execution(* com.springbootpractice.demo.p6spy.web..*(..))")
public void myPointCut() {
}
}
启用aop注解:
@EnableAspectJAutoProxy(proxyTargetClass = true)
小结
来个效果截图:
通过本片文章,你可以学会:
给代码添加aop切面,增加日志或者打印出方法执行总耗时;
给你的数据持久层打印出所有的sql语句,方便生产环境排查问题;
希望大家平安度过冠疫!每天持续精进!
原创不易,转载请注明出处。