gpt4 book ai didi

spring - Grails + Spring Web Flow-无法获取 session 锁定(LockTimeoutException)

转载 作者:行者123 更新时间:2023-12-02 14:02:56 27 4
gpt4 key购买 nike

我们在使用Web Flow 2.0.0插件的Grails应用程序中遇到了一个奇怪的行为(基本上是Spring Web Flow 2.0.8.RELEASE)。有时我们会收到 LockTimeoutException ,该用户正在浏览我们的网络流时触发它;这通常会导致服务器宕机。

在阅读了有关Spring Web Flow的更多信息之后,我意识到问题可能出在长时间运行的任务中(我已经用Thread.sleep(30000)对此进行了测试)。如果在第一次计算花费较长时间(默认情况下超过30秒)时用户两次单击“下一步”按钮,则第二个请求将无法满足(无法锁定流),因此将引发此异常。

这种行为也可以通过“疯狂”地单击下一个按钮来实现,而计算所需的时间更短(比如说5秒)。单击足够次数后,最新的请求/线程将需要等待30秒以上,因此将失败。 (我认为这是我们在生产中的案例,因为我们的计算应该花费很短的时间;想象一下,像这样疯狂地单击的住院用户::)

我的问题是:

有什么标准方法可以解决此问题?

  • 例如,如果第一个请求未完成,则以某种方式丢弃第二个请求? -这会导致死锁吗?
  • 还是在第一次单击后禁用“下一步”按钮?
  • 我认为增加锁定超时期限只会推迟此麻烦...

  • 是否可以防止服务器故障?
  • 当我在本地测试(使用Thread.sleep())时,它并没有下降,只是在生产中

  • 我认为这个问题不仅与Grails网络流用户有关,而且与Spring网络流用户也无关...

    感谢您的任何建议,
    马泰奥

    最佳答案

    建议您在第一次单击后禁用[下一步]按钮。其他解决方案(例如增加LockTimeout会使该问题推迟更长的时间(例如,不是30秒,而是60秒等)。禁用[Next]是一个完美的解决方案(尽管这只是一种解决方法,而不是服务器端的真正解决方案)。

    关于spring - Grails + Spring Web Flow-无法获取 session 锁定(LockTimeoutException),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14170480/

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