如何在Play Framework 2.4.2 scala中正确安排任务?

ser*_*eda 8 scala scheduled-tasks guice playframework-2.4

尝试在Play Framework 2.4.2 Scala中安排这样的任务,但没有运气:

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")
  }
}
Run Code Online (Sandbox Code Playgroud)

控制台中没有打印任何内容.我做错了什么?

ser*_*eda 21

好.这里是我构建的调度程序的工作代码:模块:

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

调度:

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")
}
Run Code Online (Sandbox Code Playgroud)

演员:

@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")
  }
}
Run Code Online (Sandbox Code Playgroud)

您还需要添加模块application.conf:

play.modules.enabled += "modules.JobModule"
Run Code Online (Sandbox Code Playgroud)

希望这会对某人有所帮助

  • @RoyLin:我认为"updater"是应答者自己的代码,可以从计划任务中使用.只需将其删除或替换为*您需要注入的东西(通常是服务,UserService或您需要的任何东西). (2认同)