Sto studiando per la certificazione Nucleo primavera e ho qualche dount circa su questa domanda scovato nel materiale di studio fornito:Come chiudere correttamente ApplicationContext in primavera?
Qual è il modo migliore per chiudere un contesto di applicazione?
so che se ho qualcosa di simile:
ConfigurableApplicationContext context = …
// Destroy the application
context.close();
con l'uso della vicino metodo() sul contesto objet l'ApplicationContext è chiuso e l'applicazione viene distrutto.
Ma penso che questo non sia il modo migliore per farlo.
Leggendo la documentazione ufficiale trovo che posso anche fare qualcosa di simile:
context.registerShutdownHook();
che registrare un gancio di arresto con la JVM quindi è la JVM che attiverà stretta fase di primavera prima uscite JVM . Quindi, all'uscita di JVM, verrà eseguita la fase di chiusura di Spring.
Sulla documentazione posso leggere che: di solito non è possibile chiamare context.close()
perché molte applicazioni (applicazioni Web) funzionano indefinitamente Ma cosa significa esattamente quest'ultima asserzione? perché l'applicazione web funziona indefinitamente?
Quindi le mie domande sono:
- Posso usare questo secondo modo per chiudere un contesto di applicazione anche con non applicazione web?
- È preferibile rispettare lo
context.close()
?
Tnx
'molte applicazioni (applicazioni Web) eseguite indefinitamente'. Di solito si riferisce a cose che accadono in un ciclo infinito a meno che non si interrompa il processo, qualcosa come il tuo SocketServer che ascolta le richieste in entrata. Perché vuoi chiudere manualmente WebApplicationContext in primo luogo? Di solito viene creato all'avvio del server e distrutto mentre il server è in arresto – Arkantos
Un'applicazione Web non si interrompe mai perché, se lo fai, il sito non funziona. Se si desidera interrompere l'esecuzione dell'applicazione Web, verrà arrestato (ad esempio arrestando il server Web). Quando lo fai, anche la JVM viene arrestata, quindi "Arresto con la JVM" è il modo per chiudere il contesto con JVM. Perché vuoi interrompere il contesto? – rlm
close viene utilizzato nelle applicazioni Web e shutDownHook viene utilizzato nelle applicazioni standalone. Ho appena postato la mia risposta con qualche altro dettaglio :) – Arkantos