我们有一个使用PlayFramework 2.5.4和MongoDB的Play-Project。我们希望每天更新我们的数据库。目前,我们会在每次收到请求时检查时间,并在一天结束时更新。 这导致了一些问题:
所以我发现了AKKA和旧的stackoverflowquestions(如How to schedule task daily + onStart() in Play 2.0.4?)的文档。但解决方案不再适用。
Akka.system().scheduler()
已弃用
system.scheduler()
给出compilingerrors(from docu),我不知道导入是否丢失或者还有什么。 据我所知你应该使用版本2.4以后的@inject,但是我找不到关于如何在计划中使用它或如何使用它的适当示例
实际上,我想要做的就是每天同时调用PlayerDBHandler.newDay()。
感谢您的帮助
答案 0 :(得分:17)
没有看到编译错误,我猜测system
没有定义。扩展文档中的示例,这样的事情应该有效。
public class SchedulingTask {
@Inject
public SchedulingTask(final ActorSystem system,
@Named("update-db-actor") ActorRef updateDbActor) {
system.scheduler().schedule(
Duration.create(0, TimeUnit.MILLISECONDS), //Initial delay
Duration.create(1, TimeUnit.DAYS), //Frequency
updateDbActor,
"update",
system.dispatcher(),
null);
}
}
注入 system
,您还可以为actor注入引用。或者,您可以从system
查找actor ref。
根据您的需要进行调整后,在模块中声明SchedulingTask
。
package com.example;
import com.google.inject.AbstractModule;
import play.libs.akka.AkkaGuiceSupport;
public class MyModule extends AbstractModule implements AkkaGuiceSupport {
@Override
protected void configure() {
bindActor(UpdateDbActor.class, "update-db-actor");
bind(SchedulingTask.class).asEagerSingleton();
}
}
最后,更新您的应用程序配置以启用该模块。
play.modules.enabled += "com.example.MyModule"