Spring mvc Spring MVC-@控制器注释和处理并发请求

Spring mvc Spring MVC-@控制器注释和处理并发请求,spring-mvc,Spring Mvc,我使用的是SpringMVC框架;特别是,我将@Controller、@RequestMapping和@ResponseBody注释与连接到OXM jaxb2 marshaller bean的webstatsHttpMessageConverter结合使用。我的控制器方法使用@RequestParam注释解析一些GET参数,查询后台使用JPA EntityManager的服务,并返回一个JAXB对象,该对象由HttpMessageConverter转换为其XML表示形式 我将这个场景简化为一个非

我使用的是SpringMVC框架;特别是,我将@Controller、@RequestMapping和@ResponseBody注释与连接到OXM jaxb2 marshaller bean的webstatsHttpMessageConverter结合使用。我的控制器方法使用@RequestParam注释解析一些GET参数,查询后台使用JPA EntityManager的服务,并返回一个JAXB对象,该对象由HttpMessageConverter转换为其XML表示形式

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

    @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__方法_端点一个方法。这里有没有一些我遗漏的基本概念?上面代码的日志输出显示,对getSomeData的每个调用都在等待前一个调用完成,然后才开始运行。在高容量环境中,这显然是非常不可取的。

Skaffman的响应是正确的-同时一切都正常工作,但因为我太懒了,没有使用真正的负载测试工具,所以我的浏览器在发送请求之前限制了请求。

您是如何生成HTTP请求的?使用自动测试还是浏览器?另外,我们可以看看最小的Spring配置,看看一切是如何连接起来的吗?目前,我只是在一个浏览器中生成多个HTTP请求。我也有执行请求的自动化测试用例,但它们不是并发的——它们的存在只是为了验证生成的XML是否正确。一旦有机会,我会尽快发布Spring配置。浏览器有内置的逻辑来限制并发请求,它们是做这类事情的非常糟糕的工具。你需要用一个自动化的工具来复制负载测试。@skaffman:是的,现在我觉得自己像个白痴。这会教我懒得启动JMeter测试计划。非常感谢。