我有一个Play应用程序,其中包含一些需要定期运行的任务。我可以使用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调度作业?
Play
对象上有isProd
、isDev
和isTest
方法,用于确定当前运行的模式。请参考 Play 文档。 - 4e6app
,但实际上并非如此,因为onStart
的参数不是隐式的。根据您提供的链接,我发现可以简单地检查app.mode
,这样做与您提到的方法相同。如果您想将其放入答案中,我很乐意接受它。 - Andrea