1)程序正常退出
2)使用System.exit()
3)终端使用Ctrl+C
4)使用Kill pid干掉进程
那么如果你偏偏要kill -9 程序肯定是不知所措的。
而在Springboot中,其实已经帮你实现好了一个shutdownHook,支持响应Ctrl+c或者kill -15 TERM信号。
随便启动一个应用,然后Ctrl+c一下,观察日志就可知,它在AnnotationConfigEmbeddedWebApplicationContext这个类中打印出了疑似Closing…的日志,真正的实现逻辑在其父类
AbstractApplicationContext中(这个其实是spring中的类,意味着什么呢,在spring中就支持了对优雅停机的扩展)。
public void registerShutdownHook() {
if (this.shutdownHook == null) {
this.shutdownHook = new Thread() {
public void run() {
synchronized(AbstractApplicationContext.this.startupShutdownMonitor) {
AbstractApplicationContext.this.doClose();
}
}
};
Runtime.getRuntime().addShutdownHook(this.shutdownHook);
}
}
public void destroy() {
this.close();
}
public void close() {
Object var1 = this.startupShutdownMonitor;
synchronized(this.startupShutdownMonitor) {
this.doClose();
if (this.shutdownHook != null) {
try {
Runtime.getRuntime().removeShutdownHook(this.shutdownHook);
} catch (IllegalStateException var4) {
;
}
}
}
}
<