1. 程式人生 > >SpringBoot中使用AOP 監控sql耗時

SpringBoot中使用AOP 監控sql耗時

新增aop依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4

寫切面類

package com.mycompany.financial.nirvana.core.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import
org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import java.util.Arrays; /** * 使用aop監控Mapper執行時間 * Created by me on 2017/2/20. */
@Aspect @Component public class MapperAspect { private static final Logger logger = LoggerFactory.getLogger(MapperAspect.class); @AfterReturning("execution(* com.mycompany.financial.nirvana..*Mapper.*(..))") public void logServiceAccess(JoinPoint joinPoint) { logger.info("Completed: "
+ joinPoint); } /** * 監控com.caiyi.financial.nirvana..*Mapper包及其子包的所有public方法 */ @Pointcut("execution(* com.mycompany.financial.nirvana..*Mapper.*(..))") private void pointCutMethod() { } /** * 宣告環繞通知 * @param pjp * @return * @throws Throwable */ @Around("pointCutMethod()") public Object doAround(ProceedingJoinPoint pjp) throws Throwable { long begin = System.nanoTime(); Object obj = pjp.proceed(); long end = System.nanoTime(); logger.info("呼叫Mapper方法:{},\n引數:{},\n執行耗時:{}納秒,\r\n耗時:{}毫秒", pjp.getSignature().toString(), Arrays.toString(pjp.getArgs()), (end - begin), (end - begin) / 1000000); return obj; } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55