2015-09-14 18 views
9

Mam aplikację Play 2.4. Próbujesz uruchomić cotygodniowe zadanie po uruchomieniu aplikacji. Obecne zalecenie jest to zrobić w konstruktorze dla chętnie wstrzykuje klasy (Guice). Jednak moje zadanie wymaga dostępu do usługi. Jak mogę wprowadzić tę usługę do mojego zadania bez otrzymania błędu:Wywoływanie usługi przy uruchomieniu w aplikacji Play

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

?

+2

Masz na myśli Play 2.4? – Kris

+0

Czy masz kod źródłowy? – Kris

Odpowiedz

4

Musisz użyć konstruktora wtrysku w swojej klasie ApplicationStart i dostarczyć ApplicationModule do wiązania go z niecierpliwością.

W swojej application.conf:

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

W swojej AppModule Klasa:

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

    } 
} 

w klasie 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 

    } 
} 

w przypadku trzeba go; ApplicationStop:

@Singleton 
public class ApplicationStop { 

    @Inject 
    public ApplicationStop(ApplicationLifecycle lifecycle) { 

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

    } 
} 
+0

Właściwie używam go w mojej aplikacji, właśnie usunąłem szczegółowe szczegóły implementacji. Działa, możesz spróbować. – SerhatCan

Powiązane problemy