0216 aop和打印数据库执行日志

2020-02-16 16:04:18来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

0216 aop和打印数据库执行日志

需求

image.png

maven依赖

image.png

   <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)

小结

来个效果截图:
image.png

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

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

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

image.png

代码点我!

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


原文链接:https://www.cnblogs.com/snidget/p/12319441.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Maven项目中配置文件导出问题

下一篇:mybatis-plus - 初识