0

这只是一个解决问题。我成功地在 Play Framework 中创建了一个按固定时间间隔重复的演员。但我想制作一个可以在日期的固定时间进行活动的演员,例如:“12 小时”。

我的第一个解决方案是添加一个Calendar object处理器,并在演员处于活动状态时检查时间。如果时间等于我的设置时间,只需运行我的代码。我认为这是一个可能的解决方案,但不是好的解决方案。日历对象已创建多次,我想尽可能减少Calendar object创建次数。

我在原始文档中找到了其他解决方案:https ://www.playframework.com/documentation/2.5.x/JavaAkka和 SOF 中的其他主题,但不适合我。

任何人都可以帮我解决它,好吗?

4

1 回答 1

1

使用演员系统创建一个将设置时间表的类。

public class SchedulingTask {

    @Inject
    public SchedulingTask(final ActorSystem system,
                          @Named("foo-actor") ActorRef fooActor) {
        system.scheduler().schedule(
            Duration.create(0, TimeUnit.MILLISECONDS), //Initial delay
            Duration.create(12, TimeUnit.HOURS),     //Frequency
            fooActor,
            "doSomething",
            system.dispatcher(),
            null);
    }
}

system被注入,你也可以注入对actor的引用。或者,您可以从system.

一旦你调整了它来做你想做的事,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(FooActor.class, "foo-actor");
        bind(SchedulingTask.class).asEagerSingleton();
    }
}

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

play.modules.enabled += "com.example.MyModule"
于 2017-01-03T07:37:38.393 回答