tzo*_*zik 1 scala playframework
我想在Play 2.5中创建一个计划任务.我找到了一些与此主题相关的资源,但没有一个是针对Play 2.5的.我发现这个资源与我正在寻找的相关,看起来很不错.同样在同一链接上有一个从2.4到2.5的迁移指南.
旧版本中的示例用作GlobalSettings基础,但在2.5中已弃用.迁移指南很重要,因为它说我们应该使用依赖注入而不是扩展这个特性.我不知道该怎么做.
你能给我一些指导吗?
你需要在Akka Actor中运行sheduled任务:
SchedulerActor.scala
package scheduler
import javax.inject.{Inject, Singleton}
import akka.actor.Actor
import org.joda.time.DateTime
import play.api.Logger
import scala.concurrent.ExecutionContext
@Singleton
class SchedulerActor @Inject()()(implicit ec: ExecutionContext) extends Actor {
override def receive: Receive = {
case _ =>
// your job here
}
}
Run Code Online (Sandbox Code Playgroud)
Scheduler.scala
package scheduler
import javax.inject.{Inject, Named}
import akka.actor.{ActorRef, ActorSystem}
import play.api.{Configuration, Logger}
import scala.concurrent.ExecutionContext
import scala.concurrent.duration._
class Scheduler @Inject() (val system: ActorSystem, @Named("scheduler-actor") val schedulerActor: ActorRef, configuration: Configuration)(implicit ec: ExecutionContext) {
val frequency = configuration.getInt("frequency").get
var actor = system.scheduler.schedule(
0.microseconds, frequency.seconds, schedulerActor, "update")
}
Run Code Online (Sandbox Code Playgroud)
JobModule.scala
package modules
import com.google.inject.AbstractModule
import play.api.libs.concurrent.AkkaGuiceSupport
import scheduler.{Scheduler, SchedulerActor}
class JobModule extends AbstractModule with AkkaGuiceSupport {
def configure() = {
bindActor[SchedulerActor]("scheduler-actor")
bind(classOf[Scheduler]).asEagerSingleton()
}
}
Run Code Online (Sandbox Code Playgroud)
application.conf
play.modules.enabled += "modules.JobModule"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1507 次 |
| 最近记录: |