gpt4 book ai didi

java - Spring MVC、@SessionAttribute 和可伸缩性

转载 作者:搜寻专家 更新时间:2023-11-01 03:11:18 24 4
gpt4 key购买 nike

我们正在为 80000 名用户构建一个 Spring-MVC 网络应用程序。

我在宠物诊所示例中看到很多 Controller 使用:@SessionAttribute 注释和SessionStatus status ... status.setComplete() 从 HTTP session 中存储和移除 bean。确实非常有用。

如果您计划为 80,000 名用户构建应用程序,这是最好的方法吗?如果您打算像这样存储所有表单数据,您还能使用 session 负载平衡和 session 故障转移吗?

最佳答案

它可能无法满足您的需求,不。内置实现有两个主要问题:

  1. 它并不真正支持标签式浏览。如果用户在多个浏览器选项卡中加载同一屏幕,则访问一个 Controller 的两个选项卡将破坏彼此的 session 属性数据。

  2. 如果用户不遵循您的“计划”导航路径,setComplete() 调用将被错过,对象将无限期地挂起,直到 session 过期并被清除。

第 1 项可能是问题,也可能不是问题,具体取决于您的应用的设计方式和用途。 (有些事情,例如银行,无论如何都会故意阻止多选项卡的使用)但是我认为大多数用户都希望能够在一个选项卡中编辑用户 A 的个人资料,在另一个选项卡中编辑用户 B 的个人资料,并且不会提交一个表格破坏另一个表格屏幕。

第 2 点,您可以通过始终将屏幕提交到其自己的 Controller 然后在清理后重定向来解决,但如果您还没有以这种方式构建,那将需要大量工作。

好消息是 org.springframework.web.bind.support.SessionAttributeStore 是一个公认的扩展点!您可以提供您喜欢的任何实现并将其注入(inject)您的调度程序 servlet 中。如果您想避免因业务对象而膨胀,您甚至不需要使用 Web Session 来存储信息。例如,您可以将该实际存储放在后端 terracotta 集群中,而不必担心它与您的集群策略兼容。

--

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

关于java - Spring MVC、@SessionAttribute 和可伸缩性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9491504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com