【发布时间】:2017-03-29 08:15:52
【问题描述】:
我在 Play Framework 2.5 中使用 akka quartz (https://github.com/theatrus/akka-quartz) 制作了一个调度程序
一切都很好,直到我想取消工作 因为我无法访问包含 Cancelable 对象的变量。
下面是代码:
这是针对模块的
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(控制器)中访问它
【问题讨论】:
-
您是否将
RecurrentTask注入到您的Application控制器中? -
哦,我的上帝.....我只是假设你不能那样做......我认为模块看起来很特别...... ugghh..你能创建一个答案以便我接受吗?
标签: scala playframework akka