2014-12-30 22 views
5

org.springframework.boot.loader.Launcher domyślnie zawsze odradza wątek tła w metodzie launch() (https://github.com/spring-projects/spring-boot/blob/master/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/Launcher.java#L105). Czy jest jakiś prosty sposób na zmianę tego, aby wykonać to w tym samym wątku, więc mój program uruchamiający usługę może wiedzieć, kiedy aplikacja jest w pełni załadowana, a nie po prostu natychmiastowo zakończyć działanie z sukcesem.Wyrzutnia synchroniczna Spring Boot

+0

patrząc na to, możesz użyć własnej implementacji, rozszerzyć klasę jarlauncher/warlauncher i zastąpić metodę uruchamiania. – MarianP

+0

Tak, rozumiem, mogę łatwo przesłonić tę metodę. Problem polega na tym, że rozruch wiosenny nie pozwala w łatwy sposób na użycie innej metody mainClass w metodzie uruchamiania słoika. –

+0

Nie można ustawić programu ładującego klasy kontekstu bez tworzenia nowego "wątku", co może spowodować problemy, jeśli spróbujesz zmienić tę metodę. Co właściwie robi twój "launcher usług"? –

Odpowiedz

0

Wierzę, że można zarejestrować słuchacza tak:

public static void main(String[] args) { 
    SpringApplication app = new SpringApplication(WsBootClientApplication.class); 

    app.addListeners(new ApplicationListener<ContextStartedEvent>() { 
     @Override 
     public void onApplicationEvent(ContextStartedEvent event) { 
     //do your stuff 
     } 
    }); 
    app.run(args); 
} 

Jeśli ContextStartedEvent nie jest odpowiedni dla Ciebie wydarzenie, można zastąpić ContextStartedEvent z ApplicationEvent. To jest bardziej ogólne i będzie obsługiwać wszystkie zdarzenia cyklu życia kontekstu, których aplikacja może słuchać.