8

我需要执行允许在应用程序启动时启动计划作业的代码,我该怎么做?谢谢。

4

2 回答 2

15

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

object Global extends play.api.GlobalSettings {

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

}

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


自 Play 框架 2.6x

正确的方法是使用带有急切绑定的自定义模块:

import scala.concurrent.Future
import javax.inject._
import play.api.inject.ApplicationLifecycle

// This creates an `ApplicationStart` object once at start-up and registers hook for shut-down.
@Singleton
class ApplicationStart @Inject() (lifecycle: ApplicationLifecycle) {

  // Start up code here

  // Shut-down hook
  lifecycle.addStopHook { () =>
    Future.successful(())
  }
  //...
}
import com.google.inject.AbstractModule

class StartModule extends AbstractModule {
  override def configure() = {
    bind(classOf[ApplicationStart]).asEagerSingleton()
  }
}

请参阅https://www.playframework.com/documentation/2.6.x/ScalaDependencyInjection#Eager-bindings

于 2013-01-31T17:47:21.840 回答
0

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

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

app:应用程序引用控制器包中的类应用程序。

于 2015-08-02T23:40:32.223 回答