2012-12-06 22 views
6

Mam grę! aplikacja z niektórymi zadaniami, które muszę wykonywać okresowo. Mogę zaplanować zadania za pomocą Akka, ale nie jestem pewien, jak uruchomić sam program planujący. Co robię teraz jest o przedmiot Harmonogram i rozpoczynając ją od Global.scala, jak toPocząwszy od aktorów Akka w grze

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

a następnie

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

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

Problem polega na tym, że w tym zadanie jest uruchamiane nawet w trybie rozwoju i podczas testów staje się to bardzo irytujące.

Czy istnieje sposób, aby zaplanować pracę z Akka tylko w trybie produkcji?

+1

Istnieją metody ',' isDev' isProd' i 'isTest' na [Play] (http: //www.playframework. org/documentation/api/2.1-RC1/scala/index.html # play.api.Play $) Obiekt, aby dowiedzieć się, który tryb jest aktualnie uruchomiony. – 4e6

+0

Dziękuję. O ile wspomniane metody zależą od posiadania niejawnej 'aplikacji' w zakresie - co nie jest prawdą, ponieważ argument" onStart "nie jest niejawny - po tym łączu faktycznie stwierdziłem, że można po prostu sprawdzić app.mode, który robi to samo. Jeśli chcesz umieścić to w odpowiedzi, chętnie go zaakceptuję. – Andrea

Odpowiedz

7

Metody isProd, isDev i isTest na Play obiektu może być pomocne. Nawet jeśli nie ma niejawny Application w zakresie, można przekazać je wyraźnie

override def onStart(app: Application) { 
    if (isProd(app)) Scheduler.start() 
} 
Powiązane problemy