在Play中开始Akka演员

And*_*rea 6 scala akka playframework-2.0

我玩了!我需要定期运行某些任务的应用程序.我可以使用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()
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后

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

object Global extends GlobalSettings {
  override def onStart(app: Application) {
    Scheduler.start()
  }
}
Run Code Online (Sandbox Code Playgroud)

问题在于,即使在开发模式和测试期间,任务也会运行,这很快就会非常烦人.

有没有办法只在生产模式下安排Akka的工作?

4e6*_*4e6 7

方法isProd,isDev以及isTestPlay物体可能是有益的.即使您没有隐式Application范围,也可以显式传递它

override def onStart(app: Application) {
  if (isProd(app)) Scheduler.start()
}
Run Code Online (Sandbox Code Playgroud)