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

iCo*_*unk 2 java playframework playframework-2.3

我想使用,Job所以我可以在应用程序开始时启动它们.现在它似乎已完全从Play中删除了?

我看到了一些人们创建Global类的示例,但不完全确定是否应该使用它来替换Job.

有什么建议?

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

Ale*_*r B 7

在Play 2.0中删除了Job类.

您有一些替代方案,但取决于您的Play版本以及是否需要异步:

Akka演员

对于Play 2.0以来的所有版本,您可以使用Akka Actors计划一次异步任务/ actor,并在启动时通过Play Global类执行它.

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()
           );
      }  
 }
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅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();
    }
}
Run Code Online (Sandbox Code Playgroud)

StartupConfigurationImpl会对它在默认构造函数所做的工作.

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

    public StartupConfigurationImpl() {
        init();
    }

    public void init(){
        log.info("init");
    }
}
Run Code Online (Sandbox Code Playgroud)

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