嘿,我有一個關於多線程的問題。首先,DispatcherServlet/DispatcherPorlet有多少個實例?它總是唯一的嗎?即使有人說每秒10個請求?默認情況下單身服務的情況如何?如果我有一個validationService bean被注入處理程序以提供請求驗證,作爲單例(默認情況下),我可以依賴它是單例的事實,並且在某些情況下它不會被重新實例化嗎?高負荷的春季單身豆
回答
這是一個有趣的問題。
正如在this previous question中提到的那樣,容器只允許實例化一個servlet實例。在這種情況下,你保證有一個spring上下文和一個singleton。
問題是什麼發生在以前版本的Servlet規範,我不確定明確指定此行爲。
但實際上,容器只能實例化一個servlet實例 - 我從來沒有見過其他的實例。所以假設你只能獲得一個應用上下文是安全的。
根據負載情況,servlet容器創建了多個servlet實例,但開發人員無法控制該。但在大多數情況下,容器維護每個servlet的單個實例(因爲無論如何,servlet應該是線程安全的)。
對於Spring singleton
bean,這些是每個Web應用程序的單例 - Spring應用程序上下文存儲在servlet上下文中(您可以通過WebApplicationContextUtils.getWebApplicationContext(ServletContext)訪問它)。
至於可靠性:是的,你可以依靠的事實是,在一個Spring應用程序上下文範圍內,每個單獨bean的只有一個實例。
但是這裏是衝突,如果servlet容器在高負載下創建了一些實例,它們要麼引用單例DispactherServlet(這不太可能),要麼爲每個Container servlet創建一個DispatcherServlet實例,除非每個DispatcherServlet afaik有一個句柄(無法想象),並且如果每個dispatcherServlet有一個處理程序,則必須有與處理程序一樣多的spring應用程序上下文 – lisak 2010-11-22 11:50:37
看起來您沒有仔細閱讀我的回覆。我沒有說每個SERVLET INSTANCE都有一個Spring ApplicationContext。我說有一個上下文PER WEB APPLICATION,不管有多少個servlet實例,或者你定義了多少個不同的DispatcherServlet(你可以定義多個)。 – 2010-11-22 13:26:14
其實有一個Spring ApplicationContext每個SERVLET實例(當然是在一個Web應用程序中)。 Container將請求委託給單例Servlet。當然,您可以定義多個Dispatcher,但我們正在討論一個調度程序的實例,而不是定義3個調度程序......並且總是隻有一個實例 – lisak 2010-11-22 15:12:12
- 1. 春季參考單身豆
- 2. 春季單身豆建設
- 3. 春天的單身豆
- 4. 春季複合豆?
- 5. 春季 - 豆類掃描
- 6. 春季豆執法範圍
- 7. 春季手動添加豆
- 8. 錯誤創建豆春季
- 9. 春季豆標記錯誤
- 10. CommandLineRunner和豆類(春季)
- 11. 春天單身豆字段不填充
- 12. 訪問MySQL的數據源豆春季
- 13. MeteorJS高負荷應用
- 14. 春季數據CrudRepository作爲方法豆
- 15. 春季啓動管理界面豆類
- 16. 雞和雞蛋春季豆綁定
- 17. 春季如何讓豆在工廠
- 18. 錯誤在春季實例豆3.1
- 19. 春季豆腐過濾bug /功能
- 20. 預防春季批次proxifying具體豆
- 21. 替代在springDefinitionBuilder春季4.0.X豆
- 22. 春季注入豆過濾器
- 23. 什麼春季豆類和春天的情況下使用?
- 24. 春季原型豆和春天的好處
- 25. 春季引導豆注入豆注入方法
- 26. 如何在春季單控制器注入原型豆
- 27. 春季單週期
- 28. 使qthread作爲單身人士消耗大量的CPU負荷
- 29. 複選框隱藏在身體負荷
- 30. 如何沃倫Krewenki對身體負荷
謝謝,我知道tomcat實例化單例servlet實例,但我從來沒有使用除Jetty外的其他任何內容,並且我需要該應用程序是可移植的。 – lisak 2010-11-22 12:25:05