java - 在 Play Framework 2.5.X (Java) 中安排异步任务

标签 java scheduling playframework-2.5

我们有一个使用 PlayFramework 2.5.4 和 MongoDB 的 Play-Project。我们希望每天更新我们的数据库。目前,我们每次收到请求时都会检查时间,并在一天结束时更新。 这会导致一些问题:

  1. 当前玩家必须安静等待很长时间,直到请求完成
  2. 可能有一天没有更新(但我们希望每天更新一次,即使没有任何变化)
  3. 我们必须修改我们插入的每个请求。

所以我已经找到了 AKKA 的文档和旧的 stackoverflow 问题(比如 How to schedule task daily + onStart() in Play 2.0.4?)。但解决方案不再有效。

Akka.system().scheduler()

已弃用

system.scheduler()

出现编译错误(from docu),我不知道是缺少导入还是其他什么。 据我所知,您应该从 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 被注入(inject),你也可以注入(inject)对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();
    }
}

最后,更新您的应用程序 conf 以启用该模块。

play.modules.enabled += "com.example.MyModule"

关于java - 在 Play Framework 2.5.X (Java) 中安排异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38129137/

相关文章:

java - 如何在 JButton 上运行线程?

jakarta-ee - Java EE 6 @Startup 和 @Schedule 永远不会被执行

c# - 使用 C# 安排函数在特定时间运行的最简单方法是什么

mysql - 游戏框架 2.5.4。无法连接到数据库 [db] (MySql)

scala - 播放框架 2.5.x : Inject Environment in a Module

java - 小程序未加载到 tomcat 中

java - Spring 安全java.lang.AbstractMethodError

java - 无法解析父类(super class)

c# - 如何使用 .NET 框架设置作业调度?

java - 登录失败时如何在登录页面显示消息