2014-12-30 14 views
5

org.springframework.boot.loader.Launcher di default sarà sempre generare un thread in background nel metodo di lancio() (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). C'è un modo semplice per cambiare questo per eseguire nello stesso thread, quindi il mio programma di avvio del servizio può sapere quando l'applicazione è completamente caricata, e non semplicemente uscire con successo immediatamente ogni volta.Primavera Boot lanciatore sincrono

+0

guardarlo si potrebbe usare una propria implementazione, estendere jar launcher di classe/warlauncher e l'override del metodo di lancio. – MarianP

+0

Sì, capisco che posso sovrascrivere quel metodo facilmente. Il problema è che spring-boot non consente facilmente un modo per utilizzare un mainClass diverso per il metodo di lancio jar. –

+0

Il caricatore di classe di contesto non può essere impostato senza generare un nuovo 'Thread' in modo da evitare problemi se si tenta di cambiare questo metodo. Cosa sta facendo in realtà il tuo "lanciatore di servizi"? –

risposta

0

Credo si può registrare ascoltatore in questo modo:

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

Se ContextStartedEvent non è l'evento giusto per te, è possibile sostituire con ContextStartedEvent ApplicationEvent. Questo è più generico e gestirà tutti gli eventi del ciclo di vita del contesto che l'applicazione può ascoltare.

Problemi correlati