嘿,我有一个关于多线程的问题。首先,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