6

私は遊びを持っています!定期的に実行する必要があるいくつかのタスクを含むアプリケーション。Akka を使用してタスクをスケジュールすることはできますが、スケジューラ自体を開始する方法がわかりません。私が今やっているのは、Scheduler オブジェクトを持っていてGlobal.scala、このように から開始することです

// app/jobs/Scheduler.scala
package jobs

import akka.util.duration._
import play.api.libs.concurrent.Akka
import play.api.Play.current

object Scheduler {
  def start() {
    Akka.system.scheduler.schedule(0 seconds, 1 minutes) {
      SomeTask.start()
    }
  }
}

その後

// app/Global.scala
import play.api._
import jobs.Scheduler

object Global extends GlobalSettings {
  override def onStart(app: Application) {
    Scheduler.start()
  }
}

問題は、この場合、タスクが開発モードでもテスト中でも実行され、すぐに非常に面倒になることです。

本番モードでのみ Akka でジョブをスケジュールする方法はありますか?

4

1 に答える 1

7

Methods isProdisDevおよびisTeston Playobject が役立つ場合があります。スコープに暗黙的でなくてもApplication、明示的に渡すことができます

override def onStart(app: Application) {
  if (isProd(app)) Scheduler.start()
}
于 2012-12-06T09:49:59.637 に答える