2012-12-06 6 views
6

Ich habe ein Spiel! Anwendung mit einigen Aufgaben, die ich regelmäßig ausführen muss. Ich kann die Aufgaben mit Akka planen, aber ich bin mir nicht sicher, wie ich den Scheduler selbst starten soll. Was ich jetzt mache ein Scheduler Objekt mit und starten es von Global.scala, wie dieserStart Akka Schauspieler in Play

// 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() 
    } 
    } 
} 

und dann

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

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

Das Problem ist, darin, daß die Aufgabe, auch im Entwicklungsmodus läuft und Das wird bei Tests schnell sehr nervig.

Gibt es eine Möglichkeit, Jobs mit Akka nur im Produktionsmodus zu planen?

+1

Es gibt Methoden 'isProd',' isDev' und 'isTest' auf [Play] (http: //www.playframework. org/documentation/api/2.1-RC1/scala/index.html # play.api.Play $), um herauszufinden, welcher Modus gerade läuft. – 4e6

+0

Danke. Während die Methoden, die Sie erwähnen, davon abhängig sind, eine implizite "app" im Umfang zu haben - was nicht der Fall ist, da das Argument zu "onStart" nicht implizit ist - nach Ihrem Link, fand ich tatsächlich, dass man einfach app.mode überprüfen kann, was macht das selbe. Wenn Sie das in eine Antwort aufnehmen wollen, werde ich es gerne annehmen. – Andrea

Antwort

7

Methoden isProd, isDev und isTest auf Play Objekt könnte hilfreich sein. Auch wenn Sie nicht implizite Application in ihrem Umfang hat, können Sie es passieren explizit

override def onStart(app: Application) { 
    if (isProd(app)) Scheduler.start() 
} 
Verwandte Themen