Play run和start有什么区别?

Ale*_*jan 7 playframework playframework-2.1

在下面的问题的上下文中,我想了解运行播放开始和播放运行之间的区别.

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

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

现在,当我play start在这个应用程序上执行时,Tomcat已启动并运行,X很高兴,并且生活还在继续.

但是,当我这样做时play run,Tomcat无法初始化,并且X坐在那里等待响应,最终超时.

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

我意识到这是一个过于简单化,但我希望从你那里得到的是导致Play运行和Play启动之间的差异,这可能会导致我的应用程序的行为导致这种失败.

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

播放输出和日志没有提供有关此问题的有用信息.

我正在使用Play 2.1.1

gou*_*ama 11

  • play run开发模式下启动播放应用程序.

    这意味着它在播放提示符内(在SBT内,真的)运行,带有一些自定义类加载器魔法,允许自动重新加载类,自动编译模板等.这种运行应用程序的自定义方式可能是阻止Tomcat的开始.

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

    编辑:我不知道自己的血腥细节,但这一切都发生在播放运行命令重新加载器中.虽然我不知道2.1.x和2.2.x之间的情况是否发生了变化,但在master中似乎有更多的文档记录.

  • play start是一种在生产模式下运行应用程序的交互方式.

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

但是对于实际生产,您应该使用play dist命令准备一个独立版本,然后按照文档中的描述使用包含的脚本启动它.