我在我的项目中使用Spring WebFlux
。我想创建一个拦截器来计算每个API花费的时间。在Spring MVC
中,我们具有HandlerInterceptor
中不存在的spring-boot-starter-webflux
。我尝试添加spring-boot-starter-web
并编写了拦截器,但没有成功。这是代码:
@Component
public class TimeInterceptor implements HandlerInterceptor {
public static Logger logger = Logger.getLogger(TimeInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
long startTime = System.currentTimeMillis();
request.setAttribute("startTime", startTime);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
long totaltime = System.currentTimeMillis() - (long) request.getAttribute("startTime");
request.setAttribute("totaltime", totaltime);
logger.info("Logging total time" + totaltime);
}
...
...
我想向我的应用程序添加类似的功能,并拦截每次调用所花费的时间。
提前致谢。
最佳答案
Spring WebFlux中没有HandlerInterceptor
的概念,但是您可以使用自己的WebFilter
代替。
您所描述的功能听起来很像执行器和千分尺提供的指标支持。如果您想尝试一下:
metrics
)"/actuator/metrics
并选择服务器HTTP请求的度量标准(请参阅the reference documentation)。 千分尺提供了更多方法,并可以帮助您正确设置指标,例如:在测量时间时考虑GC暂停,提供直方图/百分位数/...等。
注意:将
spring-boot-starter-web
添加到您的应用程序会将其变成Spring MVC应用程序。
关于spring - Spring 5 WebFlux中的拦截器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47091717/