2015-07-28 3 views
7

Der Versuch, Aufgaben wie das im Play-Framework zu planen:Wie plane ich eine Aufgabe in Play Framework 2.4.2 scala? 2.4.2 Scala ohne Glück

import akka.actor.Actor 
import play.api.libs.concurrent.Akka 
import scala.concurrent.duration._ 
import play.api.Play.current 
import scala.concurrent.ExecutionContext.Implicits.global 

class Scheduler extends Actor { 

    override def preStart() { 
    val dbupdate = Akka.system.scheduler.schedule(
     0.microseconds, 5.minutes, self, "update") 
    val pictureClean = Akka.system.scheduler.schedule(
     0.microseconds, 30.minutes, self, "clean") 
    } 

    def receive = { 
    case "update" => updateDB() 
    case "clean" => clean() 
    } 

    def updateDB(): Unit ={ 
    Logger.debug("updates running") 
    } 

    def clean(): Unit ={ 
    Logger.debug("cleanup running") 
    } 
} 

nichts gedruckt wird, in der Konsole. Was mache ich falsch?

+0

Verwandte Lösung http://stackoverflow.com/a/29360985/243233 – Jus12

Antwort

19

Ok. Hier Arbeits Code des Schedulers ich gebaut habe: Modul:

class JobModule extends AbstractModule with AkkaGuiceSupport { 
    def configure() = { 
    bindActor[SchedulerActor]("scheduler-actor") 
    bind(classOf[Scheduler]).asEagerSingleton() 
    } 
} 

Scheduler:

class Scheduler @Inject() (val system: ActorSystem, @Named("scheduler-actor") val schedulerActor: ActorRef)(implicit ec: ExecutionContext) 
{ 
    system.scheduler.schedule(
    0.microseconds, 5.minutes, schedulerActor, "update") 
    system.scheduler.schedule(
    30.minutes, 30.days, schedulerActor, "clean") 
} 

Schauspieler:

@Singleton 
class SchedulerActor @Inject() (updater: Updater) extends Actor { 
    def receive = { 
    case "update" => updateDB() 
    case "clean" => clean() 
    } 

    def updateDB(): Unit ={ 
    Logger.debug("updates running") 
    } 

    def clean(): Unit ={ 
    Logger.debug("cleanup running") 
    } 
} 

Sie auch Ihr Modul hinzufügen müssen in application.conf:

play.modules.enabled += "modules.JobModule" 

Hoffe, das wird jemandem helfen

+0

Obwohl ich meine Anwendung in den Scheduler injiziert habe, gibt es immer noch eine Ausnahme zur Laufzeit, die besagt, dass meine Anwendung nicht gestartet wurde. (Oh und übrigens, was ist Updater?) –

+0

Danke. Es hat wie ein Zauber für mich funktioniert. –

+0

Wenn Sie sagen "Fügen Sie Ihr Modul zur application.conf hinzu", wie genau machen Sie das? Kannst du das zur Antwort hinzufügen? – Jonik

0

Versuchen

context.system.scheduler.schedule 

Und auch sicherstellen, dass Sie auf Debug Ebene haben Anmeldung sonst diese Nachrichten werden nicht an die Konsole machen. Wenn Sie sich nicht sicher sind, versuchen Sie, sie vorübergehend in Logger.error zu ändern.

+0

Versucht, kein Glück. Vielleicht brauche ich etwas hinzuzufügen, um diesen Akteur beim Booten zu registrieren? – user2975535

Verwandte Themen