0216 aop和打印数据库执行日志
需求
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
配置要点:
- 驱动配置 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语句,方便生产环境排查问题;
希望大家平安度过冠疫!每天持续精进!
原创不易,转载请注明出处。
no pays,no gains!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架