Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC、@SessionAttribute和可扩展性_Java_Spring Mvc - Fatal编程技术网

Java Spring MVC、@SessionAttribute和可扩展性

Java Spring MVC、@SessionAttribute和可扩展性,java,spring-mvc,Java,Spring Mvc,我们正在为80000名用户构建一个SpringMVCWeb应用程序 我在petclinic示例中看到许多控制器使用: @SessionAttribute注释和 SessionStatus状态。。。status.setComplete()存储bean并从HTTP会话中删除。确实非常有用 如果你计划为8万用户构建一个应用程序,这是最好的方法吗? 如果您计划以这种方式存储所有表单数据,是否仍然可以使用会话负载平衡和会话故障切换?它可能无法满足您的需要,否。内置实现存在两个主要问题: 它不支持标签浏览。

我们正在为80000名用户构建一个SpringMVCWeb应用程序

我在petclinic示例中看到许多控制器使用:
@SessionAttribute
注释和
SessionStatus状态。。。status.setComplete()
存储bean并从HTTP会话中删除。确实非常有用

如果你计划为8万用户构建一个应用程序,这是最好的方法吗?
如果您计划以这种方式存储所有表单数据,是否仍然可以使用会话负载平衡和会话故障切换?

它可能无法满足您的需要,否。内置实现存在两个主要问题:

  • 它不支持标签浏览。如果用户在多个浏览器选项卡中加载同一屏幕,则访问一个控制器的两个选项卡将相互碰撞会话属性数据

  • 如果用户不遵循您的“计划”导航路径,则
    setComplete()
    调用将丢失,对象将无限期地挂起,直到会话过期并被清除

  • 第一个问题可能是问题,也可能不是问题,这取决于你的应用程序是如何设计的以及它的功能。(有些东西,例如银行,故意阻止多选项卡的使用)但我认为大多数用户都希望能够在一个选项卡中编辑用户A的配置文件,在另一个选项卡中编辑用户B的配置文件,而不必在提交一个表单时破坏另一个屏幕

    第二,你可以通过将一个屏幕提交到它自己的控制器中,然后在清理后重定向来解决这个问题,但是如果你还没有这样构建的话,这是一个很大的工作

    好消息是,
    org.springframework.web.bind.support.SessionAttributeStore
    是公认的扩展点!您可以提供任何您喜欢的实现,并将其注入到DispatcherServlet中。如果希望避免业务对象使信息膨胀,甚至不需要使用Web会话来存储信息。例如,您可以将实际存储放在后端terracotta集群中,而不必担心它是否与您的集群策略兼容

    --


    如果您真的需要真正的可伸缩性,那么总会有Gamma选项:将其重新设计成一种RESTful策略,它首先不依赖服务器端状态:)

    因此,与此实现相关的内存占用和并发性问题可能会损害可伸缩性。谢谢你的宝贵意见。对于带有spring实现的选项Gamma:)您有好的指针吗?