[英]Scheduling asynchronus tasks in PlayFramework 2.5.X (Java)
我們有一個使用PlayFramework 2.5.4和MongoDB的Play-Project。 我們希望每天更新我們的數據庫。 目前,我們會在每次收到請求時檢查時間,並在一天結束時更新。 這導致了一些問題:
所以我發現了AKKA和舊的stackoverflowquestions的文檔(比如如何在Play 2.0.4中安排每日任務+ onStart()? )。 但解決方案不再適用。
Akka.system().scheduler()
已棄用
system.scheduler()
給出compilingerrors( 來自文檔 ),我不知道導入是否丟失或者還有什么。 我知道你應該從版本2.4開始使用@inject,但是我找不到關於如何將它與時間表一起使用或者如何使用它的適當例子
其實我想做的就是每天都在同一時間調用PlayerDBHandler.newDay()。
感謝幫助
沒有看到編譯錯誤,我猜測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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.