我正在使用Spring MVC框架;特別是,我正在使用@Controller,@RequestMapping和@ResponseBody註釋,並將其與連接到OXM jaxb2編組bean的webstatsHttpMessageConverter結合使用。我的控制器方法使用@RequestParam註釋來解析一些GET參數,查詢在幕後使用JPA EntityManager的服務,並返回由HttpMessageConverter轉換爲其XML表示形式的JAXB對象。Spring MVC - @Controller註釋和處理併發請求
我將這種情況縮減爲一個非常簡單的測試用例,試圖確定我注意到的執行延遲的位置;示例控制器方法:
@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都會等待上一次調用在啓動之前完成運行。這在高容量環境中顯然是非常不可取的。
你如何生成HTTP請求?使用自動化測試還是瀏覽器?另外,我們可以看到最小的Spring配置,看看每件事情是如何連接起來的? – skaffman 2010-05-10 07:02:41
目前,我只是在瀏覽器中生成多個HTTP請求。我有自動執行請求的測試用例,但它們不是併發的 - 它們僅僅用於驗證生成的XML是否正確。當我有機會時,我會盡快發佈Spring配置。 – diomedes01 2010-05-10 12:06:47
瀏覽器內置邏輯來限制併發請求,它們是做這類事情的一個非常糟糕的工具。您需要使用自動化工具重現負載測試。 – skaffman 2010-05-10 13:31:46