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=truenã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+Cdeve 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 INTsinal 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. nohupNÃ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+Cenvia 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 -9oukill -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+Cvai funcionar. Dê uma olhada no controle Bash Job, mais precisamente ativado fg.