美文网首页
0216 aop和打印数据库执行日志

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

作者: 李福春carter | 来源:发表于2020-02-16 23:28 被阅读0次

    需求

    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)
    

    小结

    来个效果截图:<br /> image.png

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

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

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

    image.png

    代码点我!

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

    相关文章

      网友评论

          本文标题: 0216 aop和打印数据库执行日志

          本文链接:https://www.haomeiwen.com/subject/godvfhtx.html