我使用akka quartz(https://github.com/theatrus/akka-quartz)
在Play Framework 2.5中创建了一个调度程序在我想要取消工作之前,一切都很好 因为我无法访问持有Cancellable对象的变量。
以下是代码:
这是针对模块的
RecurrentTaskModule.scala
class RecurrentTaskModule extends AbstractModule with AkkaGuiceSupport {
override def configure() = {
bindActor[WeatherHistoryApiActor]("weather-history-api-call")
bind(classOf[RecurrentTask]).asEagerSingleton()
}
}
@Singleton
class RecurrentTask @Inject() (actorSystem: ActorSystem,
@Named("weather-history-api-call") val weatherHistoryApiActor: ActorRef,
lifecycle: ApplicationLifecycle, scheduleModel: TxScheduleModel) {
var scheduleMap: Map[String, Cancellable] = _
val f = quartzActor ? AddCronSchedule(actorRef,
"%d %s %s %s %s %s".format(0,"*","*","*","*","*",
Message(""),true)
val r = Await.result(f, timeout.duration).asInstanceOf[AddCronScheduleResult]
r match {
case AddCronScheduleSuccess(cancel: Cancellable) => {
scheduleMap.put("%s".format(schedule._1), cancel)
}
case AddCronScheduleFailure(reason: Throwable) => {
}
}
}
在我的配置中
application.conf
play.modules.enabled += "tasks.RecurrentTaskModule"
如您所见,如果我可以访问
var scheduleMap
我可以通过调用地图中的可取消对象
轻松取消作业顺便说一下,我想在我的Application.scala(控制器)
中访问它答案 0 :(得分:1)
您可以将RecurrentTask
单例注入控制器实例:
class Application @Inject() (recurrentTask: RecurrentTask) {