为什么我的 PlayFramework 应用程序出现很长的超时?

2024-04-30

我已经创建了一个工作应用程序,但有时当我更改内容并点击浏览器中的“重新加载”按钮时,该应用程序会永远超时(300000 毫秒或5分钟!)。之后我在浏览器中得到以下异常:

java.util.concurrent.TimeoutException: Futures timed out after [300000 milliseconds]
scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:219)
scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:223)
scala.concurrent.Await$$anonfun$result$1.apply(package.scala:111)
scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:53)
scala.concurrent.Await$.result(package.scala:111)
play.forkrun.ForkRun$$anonfun$askForReload$1.apply(ForkRun.scala:123)
play.forkrun.ForkRun$$anonfun$askForReload$1.apply(ForkRun.scala:121)
play.runsupport.Reloader.reload(Reloader.scala:295)
play.core.ReloadableApplication$$anonfun$get$1.apply(ApplicationProvider.scala:122)
play.core.ReloadableApplication$$anonfun$get$1.apply(ApplicationProvider.scalscala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
scala.concurrent.forkjoin.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1361)
scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

控制台中的错误:

[error] application -
[info]
[info] ! Internal server error, for (GET) [/] ->
[info]
[info] java.util.concurrent.TimeoutException: Futures timed out after [300000 milliseconds]
[info]  at scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:219) ~[scala-library-2.11.1.jar:na]
[info]  at scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:223) ~[scala-library-2.11.1.jar:na]
[info]  at scala.concurrent.Await$$anonfun$result$1.apply(package.scala:111) ~[scala-library-2.11.1.jar:na]
[info]  at scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:53) ~[scala-library-2.11.1.jar:na]
[info]  at scala.concurrent.Await$.result(package.scala:111) ~[scala-library-2.11.1.jar:na]

大多数时候,我只是停止激活器(控制台中的 CTRL+D),然后使用“激活器运行”重新启动它,应用程序就可以工作了。

我已经尝试过使用激活器1.3.2,甚至在不同的计算机上进行离线分发,但无济于事。

我正在使用 Scala IDE 4.0 (Eclipse)。

[EDIT]:我也尝试过activator ~run,因此更改将尽快编译。

超时更改的示例:

(我只是添加了第一行$document.ready(function()以及末尾相应的括号)。超时后,我停止了通过 CTRL+D 运行的激活器,并通过以下命令重新启动它:activator run。我没有更改任何代码!启动完成后,我的程序按预期运行。

 <script>
        $(document).ready(function() {
            $('#icon').click(function() {
                var $this = $(this);
                $this.css("color","orange");
                var num = $('#num');
                var currentNumber = num.text().length ? parseInt(num.text()) : 0;
                num.text(currentNumber + 1);
            });
        });
    </script>

我现在经常遇到这些超时,就像我 90% 的代码更改一样,这非常烦人。

那么如何解决超时时间过长的问题呢?


在我的第一篇文章中搜索编辑时,我似乎自己找到了答案。我把这个写下来,这样可能会对遇到类似问题的人有所帮助:

在 activator 1.3.2 中添加了“fork in run”设置。所以激活器 UI 添加了这一行fork in run := true给你的build.sbt在项目中。

只需删除、注释掉或更改该行即可fork in run := false。这解决了我的超时问题。

值得一提的是:我的项目的编译现在比以前快得多。

我仍然不完全理解为什么会发生超时,如果有人对此有更深入的了解,我会很高兴听到它。 但现在我有一个有效的解决方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的 PlayFramework 应用程序出现很长的超时? 的相关文章

随机推荐