Existem várias maneiras de encerrar um aplicativo Spring. Uma é chamar close () no ApplicationContext
:
ApplicationContext ctx =
SpringApplication.run(HelloWorldApplication.class, args);
// ...
ctx.close()
Sua pergunta sugere que você deseja fechar seu aplicativo fazendo Ctrl+C
, que é freqüentemente usado para encerrar um comando. Nesse caso...
O uso endpoints.shutdown.enabled=true
não é a melhor receita. Isso significa que você expõe um ponto de extremidade para encerrar seu aplicativo. Portanto, dependendo do seu caso de uso e do seu ambiente, você terá que protegê-lo ...
Ctrl+C
deve funcionar muito bem no seu caso. Presumo que o seu problema seja causado pelo E comercial (&) Mais explicação:
Um contexto de aplicativo Spring pode ter registrado um gancho de encerramento com o tempo de execução da JVM. Consulte a documentação do ApplicationContext .
Não sei se o Spring Boot configura este gancho automaticamente como você disse. Eu suponho que sim.
Ativado Ctrl+C
, seu shell envia um INT
sinal para o aplicativo em primeiro plano. Significa "interrompa sua execução". O aplicativo pode capturar este sinal e fazer a limpeza antes de seu término (o gancho registrado pelo Spring) ou simplesmente ignorá-lo (ruim).
nohup
é o comando que executa o seguinte programa com uma armadilha para ignorar o sinal HUP. O HUP é usado para encerrar o programa quando você desliga (feche sua conexão ssh, por exemplo). Além disso, ele redireciona as saídas para evitar que o seu programa bloqueie em um TTY desaparecido. nohup
NÃO ignora o sinal INT. Portanto, NÃO impedeCtrl+C
trabalho.
Presumo que o seu problema seja causado pelo "e" comercial (&), não pelo nohup. Ctrl+C
envia um sinal para os processos de primeiro plano. O E comercial faz com que seu aplicativo seja executado em segundo plano. Uma solução: faça
kill -INT pid
Use kill -9
oukill -KILL
está incorreto porque o aplicativo (aqui a JVM) não pode interceptá-lo para encerrar normalmente.
Outra solução é trazer de volta seu aplicativo em primeiro plano. Então Ctrl+C
vai funcionar. Dê uma olhada no controle Bash Job, mais precisamente ativado fg
.