如何在scala Play中执行开始代码!框架应用程序?

如何在scala Play中执行开始代码!框架应用程序?,scala,playframework-2.0,scheduled-tasks,startup,Scala,Playframework 2.0,Scheduled Tasks,Startup,我需要执行一个允许在应用程序启动时启动计划作业的代码,我如何才能做到这一点?谢谢。使用必须在默认包中定义的对象(如果使用): object Global extends play.api.GlobalSettings { override def onStart(app: play.api.Application) { ... } } 请记住,在开发模式下,应用程序仅在第一个请求时加载,因此您必须触发一个请求以启动流程 自播放框架2.6x以来 正确的方法是使用具有即时绑定

我需要执行一个允许在应用程序启动时启动计划作业的代码,我如何才能做到这一点?谢谢。

使用必须在默认包中定义的对象(如果使用):

object Global extends play.api.GlobalSettings {

  override def onStart(app: play.api.Application) {
    ...
  }

}
请记住,在开发模式下,应用程序仅在第一个请求时加载,因此您必须触发一个请求以启动流程


自播放框架2.6x以来

正确的方法是使用具有即时绑定的自定义模块:

导入scala.concurrent.Future
导入javax.inject_
导入play.api.inject.ApplicationLifecycle
//这将在启动时创建一次“ApplicationStart”对象,并注册用于关闭的钩子。
@独生子女
类ApplicationStart@Inject()(生命周期:ApplicationLifecycle){
//启动代码在这里
//关闭吊钩
lifecycle.addStopHook{()=>
未来。成功(())
}
//...
}
import com.google.inject.AbstractModule
类StartModule扩展了AbstractModule{
覆盖def配置(){
bind(classOf[ApplicationStart]).asagersingleton()
}
}

请参见

我遇到了类似的错误。 如@Leo所说,在app/directory中创建全局对象

我唯一需要确保的是将“app:Application”更改为“app:play.api.Application”


app:Application指的是controllers软件包中的类应用程序。

我在最后添加了一条注释,因为这让我觉得有点不对劲,希望你不要介意。Play 2中的默认软件包在哪里?@poliu2s:我想是app/文件夹。对于任何看这篇文章的人来说,新的方法是使用模块和热切的出价。看见