Wymiana GlobalSettings.onStart i OnStop

głosy
6

Próbuję przenieść moje GlobalSettings do playframework 2.4 ale mam trudności ze zrozumieniem tego, co mam robić.

Obecnie mój Global jest jak poniżej, już przeniósł się z onRequest do RequestHandler odpowiednio:

public class Global extends GlobalSettings {

        private BackgroundTasks backgroundTasks;



        @Override
        public void onStart(Application arg0) {
            Logger.info(Starting background tasks);
            backgroundTasks = new BackgroundTasks();
        }

        @Override
        public void onStop(Application arg0) {
            Logger.info(Stopping background tasks);
            backgroundTasks.shutdown();
            super.onStop(arg0);

            Logger.info(Saving modules data);
            for(Module m: controllers.Application.modules){
                m.saveData();
            }
        }
    }
Utwórz 05/06/2015 o 12:35
użytkownik
W innych językach...                            


2 odpowiedzi

głosy
11

Myślę, że powinno być wzdłuż linii (bez opakowania i importu) ...

OnStartModule.java:

public class OnStartModule extends AbstractModule {
  @Override
  protected void configure() {    
    bind(BackgroundTasks.class).asEagerSingleton();
  }
}

BackgroundTasks.java:

@Singleton
public class BackgroundTasks {

  @Inject
  public BackgroundTasks(ApplicationLifecycle lifecycle) {
    lifecycle.addStopHook(() -> {
      Logger.info("Stopping background tasks");
      this.shutdown();

      Logger.info("Saving modules data");
      for(Module m: controllers.Application.modules){
        m.saveData();
      }
      return F.Promise.pure(null);
    });
  }
}

application.conf:

play.modules.enabled += "OnStartModule"
Odpowiedział 17/06/2015 o 05:19
źródło użytkownik

głosy
3

Tylko jako dodatek do odpowiedzi. Jeśli wystąpienia klasy przy użyciu „asEagerSingleton ()”, a to zależy od aplikacji do odtwarzania zostały już rozpoczęte, a następnie trzeba „@Inject ()” zastosowanie do konstruktora klasy w celu zapewnienia, że ​​jest dostępny.

Mój problem był z powodu mojego starego kodu (przed 2.4) przy użyciu statycznej „import play.api.Play.current” zamiast przechodzącą obiekt aplikacji grać jako argument konstruktora.

Odkryłem odpowiedź w tym wątku forum [PLAY 2.4] kod inicjalizacji po uruchomieniu aplikacji

Odpowiedział 02/02/2016 o 09:42
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more