如何在不同的课程中启动和停止计时器?

我想测量从传入 HTTP 请求开始到应用程序到达某个点的时间。这两个时间点都位于不同的类中。我将如何启动和停止这些不同类的计时器。我看不到使用 MeterRegistry 中的“命名”计时器的方法。

我该怎么办?


Helenr
浏览 102回答 2
2回答

阿晨1998

您可以使用 AOP,如下所示:@Aspect@Componentpublic class ControllerMonitor {    protected static  final Logger LOGGER = LoggerFactory.getLogger(ControllerMonitor.class);    @Before("execution(public * com.demo.controller.*Controller.*(..))")    public void logBeforeAccess(JoinPoint joinPoint) {        if(joinPoint!=null){            String packageName = joinPoint.getSignature()!=null?joinPoint.getSignature().getDeclaringTypeName():"LOG-404";            LOGGER.info(". . .A request initiated from controller [" + packageName + "."+ getMethodSignature(joinPoint) +  "]. . .");        }    }    @After("execution(public * com.demo.controller.*Controller.*(..))")    public void logAfterAccess(JoinPoint joinPoint) {        if(joinPoint!=null){            String packageName = joinPoint.getSignature()!=null?joinPoint.getSignature().getDeclaringTypeName():"LOG-404";            LOGGER.info(". . .Request from controller [" + packageName + "."+ getMethodSignature(joinPoint) +  "] completed. . .");        }    }    @AfterThrowing(pointcut = "execution(public * com.demo.controller.*Controller.*(..))",throwing="exception")    public void logAfterThrowing(Exception exception){        LOGGER.error("Exception caught:"+ exception.getMessage());    }    private String getMethodSignature(JoinPoint joinPoint){        if(joinPoint!=null){            String methodName = joinPoint.getSignature().getName();            Object[] arguments = joinPoint.getArgs();            StringBuilder sb=new StringBuilder();            if(arguments!=null){                for (Object param: arguments) {                    sb.append(param).append(",");                }                sb =(sb.length()>1)?sb.deleteCharAt(sb.length()-1):sb;            }            methodName = methodName+"("+new String(sb)+")";            return methodName;        }else{            return "LOG-405";        }    }}

白衣染霜花

使用 AOP ......无需在每个类级别上进行更改。这将是一个地方配置..
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java