我们在使用Web Flow 2.0.0插件的Grails应用程序中遇到了一个奇怪的行为(基本上是Spring Web Flow 2.0.8.RELEASE)。我们有时会收到 LockTimeoutException ,这是由正在浏览我们网络流的用户触发的;这通常会导致服务器停机。
在阅读了有关Spring Web Flow的更多信息之后,我意识到问题可能出在一个长期运行的任务中(我用Thread.sleep(30000)测试了这个)。如果用户在第一次计算需要很长时间(默认情况下超过30秒)时单击“下一步”按钮两次,则无法满足第二个请求(无法锁定流),因此会抛出此异常。
这种行为也可以通过“疯狂”点击下一个按钮来实现,同时计算需要更短的时间(比方说5秒)。在足够的点击次数之后,最新的请求/线程将需要等待超过30秒,因此将失败。 (我认为这是我们在生产中的情况,因为我们的计算应该花费很短的时间;想象住点击疯狂的住院用户: - )
我的问题是:
有什么标准方法可以解决这个问题吗?
是否有任何阻止服务器停机的行为?
我认为这个问题与Grails网络流量用户以及Spring网络流量用户无关......
感谢您的任何建议, 刁
答案 0 :(得分:2)
我建议在第一次点击后禁用[下一步]按钮。其他解决方案(如加入LockTimeout会将该问题推迟更长时间(例如,不是30秒但是60秒等)。禁用[Next]将是一个完美的解决方案(尽管它只是一种解决方法,而不是服务器端的真正解决方案)。 / p>