2015-03-18 23 views
11

Sto utilizzando Spring Boot e ho un caso d'uso in cui l'utente può caricare un file che dovrebbe causare un riavvio dell'applicazione (poiché il caricamento dell'utente viene utilizzato durante la creazione di più bean). So che posso evitare di riavviare l'applicazione, ma al momento - questo è quello che voglio.Avvio automatico dell'applicazione Spring Boot

Ho trovato RestartEndpoint nel progetto Spring-Cloud, ma non sembra che venga generato ApplicationPreparedEvent. C'è un altro modo per riavviare a livello di codice l'applicazione Spring Boot?

risposta

4

Il modo più semplice per farlo chiamando il metodo refresh() in Spring ApplicationContext. Questo ucciderà e ricaricherà tutti i tuoi fagioli, quindi dovresti essere sicuro che ciò avvenga solo quando è sicuro che la tua applicazione lo faccia.

+0

Ho provato e non sembra funzionare, ottengo java.lang.IllegalStateException: GenericApplicationContext non supporta più tentativi di aggiornamento: basta chiamare 'Aggiorna' una volta. Vedi anche questa domanda: http://stackoverflow.com/questions/24720330/reload-or-refresh-a-spring-application-context-inside-a-test-method – yglodt

3

Ho un caso speciale in cui è necessario eseguire l'applicazione Spring Boot, che viene eseguita su Linux, come root.

Dal eseguo l'applicazione come systemd servizio, posso riavviare in questo modo:

Runtime.getRuntime().exec(new String[] { "/bin/systemctl", "restart", "foo" }); 

Se l'applicazione è (si spera) non è richiesto per l'esecuzione come root, un wrapper script setuid potrebbe essere utilizzato, o meglio, utilizzare sudo.

Scegli questa risposta su come farlo:

https://superuser.com/questions/440363/can-i-make-a-script-always-execute-as-root