Spring MVC Monitor / Watch Every Request

时间:2015-02-06 18:28:40

标签: java spring performance spring-mvc spring-boot

是否可以监控进来的每个Spring请求?

类似的东西:

public class MySpringWatcher extends SpringSomething{

    @Override
    public HttpServletResponse watchResponse(HttpServletRequest request){

        // Starts a timer and counter for analyzing each request made
        MyTimerCounter timerCounter = new MyTimerCounter(request);

        //Do the request, process Java and JSTL Code
        request.doSomething();

        // Mark complete and then log results
        timerCounter.stop();

    }

}

或许

public class MySpringWatcher extends SpringSomething{

    MyTimerCounter activeRequest;

    @Override
    public SpringResponse beforeRequest(HttpServletRequest request){

        // Starts a timer and counter for analyzing each request made
        activeRequest = new MyTimerCounter(request);

    }

    @Override
    public SpringResponse afterRequest(HttpServletRequest request, HttpServletResponse response){

        // Mark complete and then log results
        activeRequest.stop();

    }

}

我想监视每个请求,以便我可以分析每个请求,计算SQL请求,时间等,但我需要在每个请求和每个控制器上执行此操作。

它应该在调用控制器方法之前启动,并在JSP完成之后立即结束。

我正在使用SpringMVC 4,Spring Boot,Spring Security,Morphia等。

提前致谢!

2 个答案:

答案 0 :(得分:5)

看看HandlerInterceptors(1.11.5 Interceptors

它们将允许您在处理之前和之后拦截请求。


根据Nitroware的评论进行更新:

如果使用spring boot / JavaConfig,您需要在MvcConfig中添加以下内容:

@Configuration
@EnableWebMvc
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor());
    }

    @Bean
    public MySpringWatcher myInterceptor() {
        return new MySpringWatcher();
    }

    // ... The rest of your configuration ...
}

这将允许您注册新的HandlerInterceptor。


对于基于xml的配置,请参阅kmansoor提供的链接:

http://www.journaldev.com/...

答案 1 :(得分:0)

拦截器必须“有线”。通过配置xml或JavaConfig。