Hay muchas formas de cerrar una aplicación de primavera. Uno es llamar a close () en ApplicationContext
:
ApplicationContext ctx =
SpringApplication.run(HelloWorldApplication.class, args);
// ...
ctx.close()
Su pregunta sugiere que desea cerrar su aplicación haciendo esto Ctrl+C
, que se usa frecuentemente para terminar un comando. En este caso...
El uso endpoints.shutdown.enabled=true
no es la mejor receta. Significa que expone un punto final para finalizar su aplicación. Entonces, dependiendo de su caso de uso y su entorno, tendrá que protegerlo ...
Ctrl+C
debería funcionar muy bien en tu caso. Supongo que su problema es causado por el signo comercial (&) Más explicación:
Un contexto de aplicación Spring puede haber registrado un gancho de cierre con el tiempo de ejecución de JVM. Consulte la documentación de ApplicationContext .
No sé si Spring Boot configura este gancho automáticamente como dijiste. Asumo que lo es.
Encendido Ctrl+C
, su shell envía una INT
señal a la aplicación de primer plano. Significa "interrumpa su ejecución". La aplicación puede atrapar esta señal y hacer una limpieza antes de su terminación (el gancho registrado por Spring), o simplemente ignorarla (mal).
nohup
Es un comando que ejecuta el siguiente programa con una trampa para ignorar la señal HUP. HUP se usa para terminar el programa cuando cuelga (cierre su conexión ssh, por ejemplo). Además, redirige las salidas para evitar que su programa se bloquee en un TTY desaparecido. nohup
NO ignora la señal INT. Entonces NO impide Ctrl+C
que funcione.
Supongo que su problema es causado por el ampersand (&), no por nohup. Ctrl+C
envía una señal a los procesos en primer plano. El ampersand hace que su aplicación se ejecute en segundo plano. Una solución: hacer
kill -INT pid
Use kill -9
o kill -KILL
es malo porque la aplicación (aquí la JVM) no puede atraparlo para terminar con gracia.
Otra solución es volver a poner su aplicación en primer plano. Entonces Ctrl+C
funcionará. Eche un vistazo a Bash Job control, más precisamente en fg
.