想象一下,我有一个使用Play 2编写的应用程序。想象一下,应用程序需要在启动时抓住一些东西(读取配置文件,从JNDI获取一些资源,这种事情)。轻松播放给我们GlobalSettings对象,我们可以用它来挂钩开始和停止事件:
import play.api._
object Global extends GlobalSettings {
var someResource: Resource = _
override def onStart(app: Application) {
// might throw an exception if the path doesn't exist
resource = JNDI.grabThing("/some/path").asInstanceOf[Resource]
}
}
问题是 - 如果初始化失败,我们该怎么办?似乎只有当Play收到应用程序的第一个请求时才会执行此操作。如果我们抛出异常,会导致该请求失败,但应用程序会继续运行。
理想情况下,如果此块未成功完成,我希望停止应用程序启动。不幸的是,调用Play.stop()
实际上似乎并没有停止播放。我可以看到Server
特征定义def stop()
,看起来很有希望,但我无法找到从我的应用程序中获取Server
实例的方法。
也许我正在以错误的方式看待这一点,并且我不能假设能够从我的应用程序中停止播放(甚至只是我的应用程序),因此建议其他方法受欢迎的。
处理这些错误的最佳方法是什么?
答案 0 :(得分:1)
看来我在说谎。如果您在开发模式(onStart
)中运行,则仅在play run
中的异常后继续播放请求。如果以play start
(即生产模式)启动,则此处的异常将终止服务器,这正是我想要的。
它似乎确实留下了RUNNING_PID
文件,这很令人恼火,但这是一个单独的问题......