2014-12-30 20 views
5

org.springframework.boot.loader.Launcher standardmäßig wird immer ein Hintergrund-Thread in der launch() -Methode (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) spawnen. Gibt es eine einfache Möglichkeit, dies so zu ändern, dass es im selben Thread ausgeführt wird, sodass mein Dienst-Launcher wissen kann, wann die Anwendung vollständig geladen wurde, und nicht einfach jedes Mal mit Erfolg sofort beendet wird.Spring Boot synchrone Launcher

+0

Wenn Sie es betrachten, können Sie Ihre eigene Implementierung verwenden, die Jarlauncher-/Warlauncher-Klasse erweitern und die Startmethode überschreiben. – MarianP

+0

Ja Ich verstehe, dass ich diese Methode leicht überschreiben kann. Das Problem ist, dass Spring-Boot nicht einfach eine Möglichkeit bietet, eine andere mainClass für die jar-Startmethode zu verwenden. –

+0

Der Context Class Loader kann nicht gesetzt werden, ohne ein neues 'Thread' zu erzeugen, so dass es zu Problemen kommen kann, wenn Sie versuchen, diese Methode zu ändern. Was macht Ihr "Service Launcher" eigentlich? –

Antwort

0

Ich glaube, Sie Hörer wie folgt registrieren:

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

Wenn ContextStartedEvent für Sie nicht das richtige Ereignis ist, Sie ContextStartedEvent mit ApplicationEvent ersetzen kann. Das ist allgemeiner und wird alle Kontextlebenszyklusereignisse behandeln, die Ihre Anwendung anhören kann.