我正在使用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都会等待上一次调用在开始之前完成运行。在高容量环境中,这显然是非常不受欢迎的。
答案 0 :(得分:3)
Skaffman的回答是正确的 - 一切都在同时正常运行,但由于我懒得使用真正的负载测试工具,我的浏览器会在发送请求之前限制请求。