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/ ディレクトリに Global オブジェクトを作成します。

私が確認しなければならなかったのは、「app: Application」を「app: play.api.Application」に変更することだけでした。

app: コントローラー パッケージ内のクラス Application を参照するアプリケーション。

于 2015-08-02T23:40:32.223 に答える