SpringBoot 统计接口调用耗时的多种方式
在Spring Boot中,统计接口调用耗时的方法有多种,以下是几种常见的方法:
- 使用AOP(Aspect-Oriented Programming)
Spring AOP可以让你在不修改现有代码的情况下,增加额外的行为,例如日志记录、性能监控等。
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class PerformanceMonitoringAspect {
@Around("execution(public * com.yourpackage..*Controller.*(..))")
public Object profileAllMethods(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
long start = System.currentTimeMillis();
Object result = proceedingJoinPoint.proceed();
System.out.println(proceedingJoinPoint.getSignature() + " took " + (System.currentTimeMillis() - start) + " ms");
return result;
}
}
- 使用Spring Boot Actuator
Spring Boot Actuator模块可以帮助你监控和管理Spring Boot应用,包括接口的调用耗时。
首先,添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
然后,在application.properties中启用或者通过JVM参数启用。
management.endpoints.web.exposure.include=metrics
接下来,你可以通过/actuator/metrics/http.server.requests
端点来查看请求的详细信息,包括耗时。
- 使用Spring MVC的Interceptor
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class PerformanceInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
long start = System.currentTimeMillis();
request.setAttribute("startTime", start);
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
long end = System.currentTimeMillis();
long start = (Long) request.getAttribute("startTime");
System.out.println(request.getRequestURI() + " took " + (end - start) + " ms");
}
}
然后在Spring配置中注册这个Interceptor:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.sp
评论已关闭