我需要执行允许在应用程序启动时启动计划作业的代码,我该怎么做?谢谢。
问问题
3066 次
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 回答