アプリケーションの開始時にスケジュールされたジョブの起動を許可するコードを実行する必要がありますが、これを行うにはどうすればよいですか?ありがとう。
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/ ディレクトリに Global オブジェクトを作成します。
私が確認しなければならなかったのは、「app: Application」を「app: play.api.Application」に変更することだけでした。
app: コントローラー パッケージ内のクラス Application を参照するアプリケーション。
于 2015-08-02T23:40:32.223 に答える