2015-09-14 8 views
9

Ich habe eine Play 2.4-Anwendung. Der Versuch, eine wöchentliche Aufgabe zu starten, wenn die Anwendung gestartet wird. Die aktuelle Empfehlung ist, das in einem Konstruktor für eine eifrig injizierte Klasse (Guice) zu tun. Meine Aufgabe benötigt jedoch Zugriff auf einen Dienst. Wie kann ich diesen Service in meine Aufgabe injizieren, ohne einen Fehler zu bekommen:Aufruf eines Dienstes beim Start in einer Play-Anwendung

?

+2

Meinst du Play 2.4? – Kris

+0

Haben Sie Quellcode? – Kris

Antwort

4

Sie müssen Konstruktorinjektion in Ihrer ApplicationStart-Klasse verwenden und ein ApplicationModule bereitstellen, um es eifrig zu binden.

In Ihrem application.conf:

play.modules.enabled += "yourPath.AppModule" 

In Ihrer AppModule Klasse:

public class AppModule extends AbstractModule { 

    @Override 
    protected void configure() { 

     Logger.info("Binding application start"); 
     bind(ApplicationStart.class).asEagerSingleton(); 

     Logger.info("Binding application stop"); 
     bind(ApplicationStop.class).asEagerSingleton(); 

    } 
} 

In Ihrer ApplicationStart Klasse:

@Singleton 
public class ApplicationStart { 

    @Inject 
    public ApplicationStart(Environment environment, YourInjectedService yourInjectedService) { 

     Logger.info("Application has started"); 
     if (environment.isTest()) { 
      // your code 
     } 
     else if(
      // your code 
     } 

     // you can use yourInjectedService here 

    } 
} 

Falls Sie sie brauchen; ApplicationStop:

@Singleton 
public class ApplicationStop { 

    @Inject 
    public ApplicationStop(ApplicationLifecycle lifecycle) { 

     lifecycle.addStopHook(() -> { 
      Logger.info("Application shutdown..."); 
      return F.Promise.pure(null); 
     }); 

    } 
} 
+0

Eigentlich verwende ich es in meiner Anwendung, ich habe gerade die spezifischen Implementierungsdetails gelöscht. Es funktioniert, Sie können es versuchen. – SerhatCan