需求

maven依赖

   <dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.8.7</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>28.2-jre</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>

打印sql

配置要点:

  1. 驱动配置 application.properties

spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver
spring.datasource.url=jdbc:p6spy:mysql://localhost:3306/demo_datasource
  1. 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)

小结

来个效果截图:

通过本片文章,你可以学会:

  1. 给代码添加aop切面,增加日志或者打印出方法执行总耗时;
  2. 给你的数据持久层打印出所有的sql语句,方便生产环境排查问题;

希望大家平安度过冠疫!每天持续精进!

代码点我!

原创不易,转载请注明出处。

最新文章

  1. pycharm快捷键及一些常用设置
  2. 全是套路——BFS
  3. [转]session 持久化问题(重启服务器session 仍然存在)
  4. 最好的文本框样式 最漂亮的文本框样式 textbox css样式
  5. eclipse中LogCat有时不显示信息的简单解决办法
  6. [解决]Kali Linux DHCP自动获取IP失败 坑爹的VMWare桥接
  7. Android之fragment点击切换和滑动切换结合
  8. 公司需求知识自学-Oracle的Package的作用及用法
  9. angular JS中使用jquery datatable添加checkbox点击事件
  10. 关于mysql的报错的1366
  11. java面向对象的思想(java三大特性)
  12. PXE | 开关机
  13. [转载]css代码优化的12个技巧
  14. 004_加速国内docker源下载速度
  15. 《Python》 基础数据类型补充和深浅copy
  16. 阿里云服务器+宝塔环境+LNMP+tp5.1安装和调试
  17. C#核心语法-泛型(详细讲解泛型方法、泛型类、泛型接口、泛型约束,了解协变逆变)
  18. flask学习(五):使用配置文件
  19. 如果plsql连接没问题,但程序中报ORA-12504的错误
  20. 【总结整理】openlayer加载搜狗地图,qq地图,mapabc

热门文章

  1. PHP0020:PHP 单文件上传 多文件上传
  2. string_random
  3. Flutter初探_环境配置以及创建项目
  4. LNMP环境配置(2)
  5. 剑指offer-面试题40-最小的k个数-最大堆
  6. BZOJ #5457: 城市 [线段树合并]
  7. 吴裕雄--天生自然 PYTHON数据分析:所有美国股票和etf的历史日价格和成交量分析
  8. Mac常用命令行
  9. C#实例之简单聊天室(状态管理)
  10. 【pattern】设计模式(1) - 单例模式