Spring MVC - @Controller注释和处理并发请求

时间:2010-05-10 02:58:48

标签: spring-mvc

我正在使用Spring MVC框架的部分;特别是,我正在使用@ Controller,@ RequestMapping和@ResponseBody注释,以及连接到OXM jaxb2 marshaller bean的webstatsHttpMessageConverter。我的控制器方法使用@RequestParam注释来解析一些GET参数,查询在后台使用JPA EntityManager的服务,并返回由HttpMessageConverter转换为其XML表示的JAXB对象。

我把这个场景减少到一个非常简单的测试用例,试图确定我注意到的执行延迟的位置;示例控制器方法:

    @RequestMapping("/my_service__method_endpoint")
    @ResponseBody
 public Jaxb2CompiledClass getSomeData(@RequestParam String param1,
                         @RequestParam Date start, @RequestParam Date end) {
            log.debug("Entering getSomeData");
            Thread.sleep(5000);
            log.debug("Finished waiting, leaving getSomeData);

  return new Jaxb2CompiledClass();
 }

此方案运行正常,并以适当的格式返回相应的数据。但是,在加载测试这个配置时,我遇到了一个问题 - 我用@RequestMapping注释的每个控制器方法都不会同时运行;如果我向服务端点生成多个HTTP请求,则每个方法调用将在处理下一个HTTP请求之前完成。在我的实际代码中,我使用服务对象通过JPA提取结果,并将这些结果转换为适当的Jaxb2类的对象。我的理解是这个控制器应该能够同时运行这些方法,每个HTTP请求调用一次/ my_service__method_endpoint。我在这里错过了一些基本概念吗?上面代码的日志输出显示,每次调用getSomeData都会等待上一次调用在开始之前完成运行。在高容量环境中,这显然是非常不受欢迎的。

1 个答案:

答案 0 :(得分:3)

Skaffman的回答是正确的 - 一切都在同时正常运行,但由于我懒得使用真正的负载测试工具,我的浏览器会在发送请求之前限制请求。