2012-12-06 14 views
6

Ho un gioco! applicazione con alcune attività che ho bisogno di eseguire periodicamente. Posso pianificare le attività usando Akka, ma non sono sicuro di come avviare lo scheduler stesso. Quello che sto facendo in questo momento sta avendo un oggetto di pianificazione e partendo da Global.scala, come questoInizio attori Akka 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() 
    } 
    } 
} 

e poi

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

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

Il problema è che in questo, l'attività viene eseguita anche in modalità di sviluppo e durante i test, diventa presto molto fastidioso.

C'è un modo per pianificare i lavori con Akka solo in modalità di produzione?

+1

ci sono metodi 'isProd',' 'isDev' e isTest' su [Play] (http: //www.playframework. org/documentation/api/2.1-RC1/scala/index.html # play.api.Play $) oggetto per scoprire la modalità attualmente in esecuzione. – 4e6

+0

Grazie. Mentre i metodi che menzioni dipendono dall'avere un'app implicita in scope - che non è il caso, dal momento che l'argomento di 'onStart' non è implicito - seguendo il tuo link, in realtà ho scoperto che si può semplicemente controllare app.mode, che fa lo stesso. Se vuoi metterlo in una risposta, sarò lieto di accettarlo. – Andrea

risposta

7

Metodi isProd, isDev e isTest su Play oggetto potrebbe essere utile. Anche se non ha implicita Application nel campo di applicazione, è possibile passare in modo esplicito

override def onStart(app: Application) { 
    if (isProd(app)) Scheduler.start() 
} 
Problemi correlati