2010-05-10 94 views
1

我正在使用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都會等待上一次調用在啓動之前完成運行。這在高容量環境中顯然是非常不可取的。

+0

你如何生成HTTP請求?使用自動化測試還是瀏覽器?另外,我們可以看到最小的Spring配置,看看每件事情是如何連接起來的? – skaffman 2010-05-10 07:02:41

+0

目前,我只是在瀏覽器中生成多個HTTP請求。我有自動執行請求的測試用例,但它們不是併發的 - 它們僅僅用於驗證生成的XML是否正確。當我有機會時,我會盡快發佈Spring配置。 – diomedes01 2010-05-10 12:06:47

+0

瀏覽器內置邏輯來限制併發請求,它們是做這類事情的一個非常糟糕的工具。您需要使用自動化工具重現負載測試。 – skaffman 2010-05-10 13:31:46

回答

3

Skaffman的回覆是正確的 - 一切正常併發,但因爲我懶得使用真正的負載測試工具,所以我的瀏覽器在發送之前就扼殺了請求。