java没有打印mysql日志_0216 aop和打印数据库执行日志

需求

b6f48bde59e8725f6b855ba787d553a0.png

maven依赖

dde862088de274b3f79c38d17e4b4bdf.png

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)

小结

来个效果截图:

8cc8993f1af85c188d09324b7a96a80c.png

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

给代码添加aop切面,增加日志或者打印出方法执行总耗时;

给你的数据持久层打印出所有的sql语句,方便生产环境排查问题;

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

095c28e60e520a3b187226798effbee4.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php数组基础

php中,数组的下标可以是整数,或字符串。 php中,数组的元素顺序不是由下标决定,而是由其“加入”的顺序决定。 定义: $arr1 array(元素1,元素2,。。。。。 ); array(1, 5, 1.1, “abc”, tr…

1.格式化输入输出

1.格式化输入input() input()函数,通常只能返回一个数据类型,那么怎么可以进行多个变量的复制呢?看下面这段代码。 1 str1, str2 eval(input("请输入两个字符串:")) 2 print(str1, str2) 3 4 num1, num2 eval(input(…

canvas像素点操作 —— 视频绿幕抠图

原文地址 主要内容 上篇文章学习了canvas像素点的获取 —— 传送门, 今天学一下canvas像素点操作。 一个方法:putImageData putImageData 用法: context.putImageData(imgData, x, y, dX, dY, dWidth, dHeight);参数描述imgData规定要放…

并发编程(一):基础概述

本篇博客主要讲述并发编程中的一些基础内容,并了解一下基本概念。 首先我们了解一下什么是并发? 同时拥有两个或者多个线程,如果程序在单核处理器上运行,多个线程将交替的换入或者换出内存,这些线程是同时“存在”的&a…

python哲学翻译_Python

正在学习Python开发语言的用户,可能会在学习过程中听说过讲师说过Python有一段有关于Python的哲学理念机设计思想,在Python里输入“import this”命令就会出现一段英文格言,这里我们把Python的这段格言的双语版分享出来,帮助正在学…

如何创建线程?

Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务。下面先讲述一下Java中的应用程序和进程相关的概念知识,然后再阐述如何创建线…

经典MapReduce作业和Yarn上MapReduce作业运行机制

一、经典MapReduce的作业运行机制 如下图是经典MapReduce作业的工作原理: 1.1 经典MapReduce作业的实体 经典MapReduce作业运行过程包含的实体: 客户端,提交MapReduce作业。JobTracker,协调作业的运行。JobTracker是一个Java应用程…

根据Linux2.6.26源码分析进程模型

1.关于进程 1.1进程的概念 进程是正在运行的程序实体,并且包括这个运行的程序中占据的所有系统资源,比如说CPU(寄存器),IO,内存,网络资源等。很多人在回答进程的概念的时候,往往只会说它是一个运行的实体,而…

socket编程开发

1.socket是什么? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式, 它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就…

python大作业外星人入侵_【python3小白上路系列】外星人入侵——开始

早起的周日,今日阴天,老爸生日快乐~开始项目首先创建一个空的Pygame窗口,供后面用来绘制游戏元素,如飞船和外星人。我们还将让这个游戏响应用户输入、设置背景色以及加载飞船图像。1.1.1 创建Pygame窗口以及相应用户输入首先&…

Codeforces 975D Ghosts 【math】

打了两次cf里的比赛,发现cf比较喜欢考数学题。一开始看到这道题没有思路,因为总想dp,图论,贪心这些东西。如果下次再没有思路,可以从数学的角度入手。 题解说的比较清楚: 2018.9.4又看了遍这题,…

java 一维数组_java基础 ---- 一维数组

为什么要使用数组: 因为不使用数组计算多个变量的时候太繁琐,不利于数据的处理。-------- 数组也是一个变量,是存储一组相同类型的变量声明一个变量就是在内存中划出一块合适的空间声明一个数组就是在内存中划出一块连续的空间数组长度就是…

Java中的策略设计模式-示例教程

策略模式是行为设计模式之一 。 当我们对一个特定任务有多种算法,并且客户端决定在运行时使用的实际实现时,将使用策略模式。 策略模式也称为策略模式 。 我们定义了多种算法,并让客户端应用程序将算法用作参数。 此模式的最佳示例之一是采用…

vue-cli 3.0 使用全过程讲解

2018年8月13日更新: 恭祝vue-cli 3.0.0 官方正式版发布,此后我们可以正式在3.0环境下进行项目开发了。 此文发布以来受到了很多朋友的阅读,但我深知这篇文章还是很浅显的,因此,我会在后续的 3.0 使用过程中分享我遇到…

前端入行两年--教会了我这些道理

1.前言 光阴似箭,日月如梭。不得不感慨时间过得很快,2017差不多结束了,一下子我从事前端开发的时间已经两年了。这两年可以说是一波三折,回想这两年的经历,让我忍不住了写下了这篇文章,记录自己在这两年经历…

巴霍巴利王

巴霍巴利王 惊心动魄的宫廷政变,必然铸就新的王朝更迭。时代的婉转,终究选上得民心的君主。我们的故事就这样悄无声息的将你带入幽深的宫廷内院。 夜幕之中,面对寒冷与杀戮,一位身负重伤王室女人,抱着一个新生儿&#…

Java中的观察者设计模式-示例教程

观察者模式是行为设计模式之一 。 当您对对象的状态感兴趣并希望在发生任何更改时得到通知时,观察者设计模式很有用。 在观察者模式中,监视另一个对象状态的对象称为Observer ,而正在监视的对象称为Subject 。 根据GoF,观察者模式…

IdnentiyServer-使用客户端凭据访问API

情景如下:一个客户端要访问一个api,不需要用户登录,但是又不想直接暴露api给外部使用,这时可以使用identityserver添加访问权限。 客户端通过clientid和secrect访问identitserver的Token Endpoint,获取accesstoken; 接…

重要·Flutter 首个预览版 发布

今天,InfoQ China 主办的 GMTC 全球大前端技术大会在北京举行,在这次大会中 Google 宣布发布 Flutter 首个预览版。这无疑让 Flutter 迈上了一个新的台阶。于此同时推出了 Flutter 社区中文资源 。可能有些同学还不了解 Flutter,这里再普及一…

复习做UWP时涉及到的几种加密签名相关

复习做UWP时涉及到的几种加密签名相关 原文:复习做UWP时涉及到的几种加密签名相关本人菜鸟一枚,大学里凭兴趣学了一点WP的皮毛,后来又幸运(或者不幸)的进了一家专注于Windows生态的公司做了一段时间的UWP。在博客园写点自己遇到的…