playframework - Play run 和 start 之间有什么区别?

标签 playframework playframework-2.1

在以下问题的上下文中,我想了解运行 play start 和 play run 之间的区别。

我的具体用例相当复杂,但我会像这样简化它:

  • 在启动时(作为 Global.scala 的一部分),我的 Play 应用程序对 Java 应用程序 X 的入口点进行直接方法调用。
  • 作为其初始化的一部分,X 启动 Tomcat 的嵌入式实例。
  • 在 X 的初始化结束时,它会验证 Tomcat 是否已启动并响应请求。

  • 现在,当我这样做时 play start在这个应用程序上,Tomcat 启动并运行,X 很高兴,生活还在继续。

    但是,当我这样做时 play run ,Tomcat 初始化失败,X 坐在那里等待响应,最终超时。

    我需要使用 play run 的主要原因用于开发,因为我想通过运行 play debug run 附加 Eclipse 调试器来 Play .

    我意识到这是一种过度简化,但我希望从您那里得到的是导致 Play run 和 Play start 之间的差异,这可能会对我的应用程序的行为产生影响,从而导致此失败。

    现在,我尝试在 http://www.playframework.com/documentation/2.1.x/ThreadPools 之后增加 Play 的默认线程池中的线程数。但没有运气。

    Play 输出和日志没有给我关于这个问题的有用信息。

    我正在使用 Play 2.1.1

    最佳答案

  • play run 中启动 Play 应用程序开发模式 .

    这意味着它在 Play 提示中运行(在 SBT 中,真的),使用一些自定义类加载器魔法来允许自动重新加载类、自动编译模板等。这种运行应用程序的自定义方式可能是阻止 Tomcat 的原因开始。

    如果没有来自 Tomcat 的一些日志输出或堆栈跟踪,很难说更多关于 Tomcat 不启动的原因。这有点类似于在另一个容器中启动 Tomcat,后者通过自定义类加载器(如... Tomcat)提供隔离。

    编辑 : 我自己不知道血腥细节,但这一切都发生在 the play run commandreloader .好像是more documented在 master 中,虽然我不知道 2.1.x 和 2.2.x 之间是否发生了变化。
  • play start是在 中运行应用程序的交互式方式生产方式 .

    这意味着它与调用 java -cp [...] YourMainClass 完全相同。 ,除了它从 Play 提示交互运行(需要 Ctrl+D 分离)而不是在后台运行(因此它不适合自动部署)。

  • 但是,对于实际生产,您应该使用 play dist 准备一个独立版本。命令,然后使用包含的脚本启动它,如 in the documentation 所述.

    关于playframework - Play run 和 start 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18213427/

    相关文章:

    scala - 供应异常 : Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument

    playframework - 如何使用dependency.yml 引用本地模块?

    scala - 如何使用 Play 2.1/Scala 设置 cookie?

    playframework - 多个可选参数 - 如何使用路由和模板

    playframework - Play Framework : Cannot load the JNotify native library

    scala - 如何删除在 Play 框架和 slick 的单元测试中创建 session 的代码

    security - 如何在 PlayFramework 2.1.x (Scala) 中实现 CSRF 保护?

    java - 在weblogic上部署play框架

    java - Java 扩展是否可以在 Play Framework 上运行?

    spring - 用 Spring 玩框架 2.1