2015-09-14 33 views
9

Ho un'applicazione Play 2.4. Cercando di avviare un'attività settimanale all'avvio dell'applicazione. L'attuale raccomandazione è quella di farlo in un costruttore per una classe avidamente iniettata (Guice). Tuttavia, il mio compito richiede l'accesso a un servizio. Come posso iniettare quel servizio nella mia attività senza ottenere un errore:Chiamare un servizio all'avvio in un'applicazione Play

Error injecting constructor, java.lang.RuntimeException: There is no started application 

?

+2

Vuoi dire Play 2.4? – Kris

+0

Hai qualche codice sorgente? – Kris

risposta

4

È necessario utilizzare l'iniezione del costruttore nella classe ApplicationStart e fornire un ApplicationModule per collegarlo con entusiasmo.

Nel vostro application.conf:

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

Nel vostro AppModule Classe:

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(); 

    } 
} 

Nella classe ApplicationStart:

@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 

    } 
} 

In caso di necessità; ApplicationStop:

@Singleton 
public class ApplicationStop { 

    @Inject 
    public ApplicationStop(ApplicationLifecycle lifecycle) { 

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

    } 
} 
+0

In realtà lo uso nella mia applicazione, ho appena cancellato i dettagli di implementazione specifici. Funziona, puoi provarlo. – SerhatCan