[英]Spring MVC, @SessionAttribute and scalability
我们正在为8万用户构建Spring-MVC Web应用程序。
我在petclinic示例中看到很多控制器使用: @SessionAttribute
注释和SessionStatus status ... status.setComplete()
来存储和删除HTTP会话中的bean。 非常有用。
如果您计划为8万用户构建应用程序,这是最好的方法吗? 如果您打算存储所有这样的表单数据,您仍然可以使用会话负载平衡和会话故障转移吗?
它可能无法满足您的需求,不。 内置实现有两个主要问题:
它并不真正支持选项卡式浏览。 如果用户在多个浏览器选项卡中加载相同的屏幕,则访问一个控制器的两个选项卡将会破坏彼此的会话属性数据。
如果用户不遵循您的“计划”导航路径,则会错过setComplete()
调用,并且对象会无限期地挂起,直到会话到期并被清除。
1号可能是也可能不是问题,具体取决于您的应用程序的设计方式和作用。 (有些事情,例如,银行,无论如何故意阻止多标签的使用)但我认为大多数用户希望能够在一个标签中编辑用户A的个人资料,而在另一个标签中编辑用户B的个人资料而没有提交一个表格打破另一个屏幕。
您可以通过将屏幕提交到自己的控制器然后在清理后重定向来解决问题,但如果您尚未构建这种方式,则需要进行大量工作。
好消息是org.springframework.web.bind.support.SessionAttributeStore
是一个公认的扩展点! 您可以提供您喜欢的任何实现,并将其注入您的调度程序servlet。 如果要避免使用业务对象使其膨胀,则甚至不需要使用Web会话来存储信息。 例如,您可以将实际存储放在后端兵马俑集群中,而不用担心它与您的集群策略兼容。
-
如果你真的需要真正的可扩展性,那么总有选项Gamma:将它重新编写成一个RESTful策略,它不依赖于服务器端状态:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.