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