异步作业是否已从 Play 框架中移除?什么是更好的选择?

Was asynchronous jobs removed from the Play framework? What is a better alternative?

我想使用 Job 这样我就可以在申请开始时将它们踢掉。现在好像已经完全从 Play 中删除了?

我看到一些示例,人们创建了 Global class,但不完全确定 if/how 我应该用它来替换 Job

有什么建议吗?

编辑:如果你要投反对票,请给出理由。也许我在问题中遗漏了一些东西,也许这不属于这里。至少有些东西...

工作 class 已在 Play 2.0 中删除。

根据您的 Play 版本以及您是否需要异步,您有一些选择:

Akka 演员

对于自 Play 2.0 以来的所有版本,您可以使用 Akka Actors 安排一次异步 task/actor 并在启动时通过 Play Global class.

执行它
public class Global extends GlobalSettings {

    @Override
    public void onStart(Application app) {
           Akka.system().scheduler().scheduleOnce(
               Duration.create(10, TimeUnit.MILLISECONDS),
               new Runnable() {
                    public void run() {
                        // Do startup stuff here
                        initializationTask();
                    }
               },
               Akka.system().dispatcher()
           );
      }  
 }

有关详细信息,请参阅 https://www.playframework.com/documentation/2.3.x/JavaAkka

热切的单身人士

从 Play 2.4 开始,您可以使用 Guice 快速绑定单例

import com.google.inject.AbstractModule;
import com.google.inject.name.Names;

public class StartupConfigurationModule extends AbstractModule {
    protected void configure() {

        bind(StartupConfiguration.class)
            .to(StartupConfigurationImpl.class)
            .asEagerSingleton();
    }
}

StartupConfigurationImpl 会在默认构造函数中完成它的工作。

@Singleton
public class StartupConfigurationImpl implements StartupConfiguration {
    @Inject
    private Logger log;

    public StartupConfigurationImpl() {
        init();
    }

    public void init(){
        log.info("init");
    }
}

https://www.playframework.com/documentation/2.4.x/JavaDependencyInjection#Eager-bindings