Análisis del código fuente de Spring: cierre ordenado del servicio
Queremos detener un proceso Spring, generalmente mediante el comando kill. Los comandos más utilizados incluyen kill -2 pid (ctrl + C), kill -9 pid, kill -15 pid.
Mata a -15 pid.
Kill -9 puede entenderse como el sistema operativo que elimina por la fuerza el proceso directamente desde el nivel del kernel. El servicio no tiene un tiempo establecido ni un tiempo de limpieza, se elimina directamente y no se puede monitorear.
Kill -2 y -15 significa que el sistema operativo envía una señal al proceso para notificar a la aplicación que se está cerrando activamente. La aplicación puede escuchar y recibir la señal, completar algunas operaciones de recuperación de apagado. y luego detenerse.
Para ser precisos, Spring no detecta estas señales de apagado, pero las monitorea el subproceso Java Signal Dispatcher. Este subproceso entrega la señal recibida a la JVM, y la JVM determinará si la señal es de tipo. Si se trata de una señal de apagado como -2/-15, se entregará a java.lang.Shutdown para completar el apagado.
Puede agregar Runtime.getRuntime().addShutdownHook() para personalizar el enlace de apagado.
Para obtener un análisis detallado del principio del proceso de cierre de jvm, consulte el detector de eventos de cierre del proceso de Java.
Spring también registrará devoluciones de llamadas de gancho a través de Runtime.getRuntime().addShutdownHook() durante el proceso de inicio.
SpringApplication
En el método de ejecución de SpringApplication, se llamará a refrescoContext y a context.registerShutdownHook() se llamará de forma predeterminada
AbstractApplicationContext
En AbstractApplicationContext.registerShutdownHook(), se llama a Runtime.getRuntime().addShutdownHook().registerShutdownHook() para agregar un gancho de apagado y la devolución de llamada correspondiente se implementa como doClose()
donde publicar ContextClosed();
El evento posterior a ContextClosedEvent es un paso muy crítico. Todas las empresas o componentes que quieran completar la operación de limpieza pueden escuchar este evento para completar la activación.
Todo el proceso de reciclaje es relativamente sencillo.