嘿,我有一個關於多線程的問題。首先,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. CommandLineRunner和豆類(春季)
- 3. 春季 - 豆類掃描
- 4. 春天單身豆字段不填充
- 5. 訪問MySQL的數據源豆春季
- 6. 春季如何讓豆在工廠
- 7. 錯誤在春季實例豆3.1
- 8. 春季引導豆注入豆注入方法
- 9. 如何在春季單控制器注入原型豆
- 10. 使qthread作爲單身人士消耗大量的CPU負荷
- 11. 春季單週期
- 12. 複選框隱藏在身體負荷
- 13. 無法顯示對身體負荷
- 14. 春季註釋懶惰負載
- 15. MySQL中創建高負荷平均
- 16. 春季豆 - 爲什麼我的私人領域是靜態的?
- 17. 春季休息請求中的單場身體
- 18. 負荷值,ASPX
- 19. 懶柱負荷
- 20. 負荷變量
- 21. 春季所有豆的全局銷燬方法
- 22. 春季會議redis的 '命名沒有豆 'springSessionRepositoryFilter' 被定義'
- 23. 春季 - 注入2種相同類型的豆
- 24. 春季4 - 自動裝配問題:org.springframework.beans.factory.UnsatisfiedDependencyException:無型的排位豆
- 25. 春季啓動 - 無豆名爲「entityManagerFactory的」可用
- 26. 春季JUnit測試,無法加載ApplicationContext,創建豆的錯誤
- 27. 春季定義的Java配置會話範圍豆
- 28. 春季引導:排除一些自動配置的豆
- 29. 春季開機緩存熱身
- 30. 春季啓動基本身份驗證
謝謝,我知道tomcat實例化單例servlet實例,但我從來沒有使用除Jetty外的其他任何內容,並且我需要該應用程序是可移植的。 – lisak 2010-11-22 12:25:05