废话少说
springboot的优雅停机是借助于ShutdownHook回调实现的(网上文章都说烂了)。
在执行hook流程时,spring借助CountDownLatch阻塞线程达到在一定时间内不退出程序,来处理剩下的任务。
原地址:https://juejin.cn/post/7197292579057221693 发表在掘金,这次拿到csdn,书写格式可能不是很友好。
涉及到的知识点
Spring
SmartLifecycle
DefaultLifecycleProcessor
WebServerGracefulShutdownLifecycle
WebServerStartStopLifecycle
WebServerManager
TomcatWebServer implements WebServer
java
java.util.concurrent.CountDownLatch
java.lang.Runtime
java.lang.ApplicationShutdownHooks
java.lang.Shutdown
关于spring hook的二三事
什么时候设置的hook
什么时候触发的hook
触发hook后续的流程
设置hook线程和触发hook
SpringApplication#run()
org.springframework.boot.SpringApplication#refreshContext()
org.springframework.context.support.AbstractApplicationContext#registerShutdownHook()
@Override
public void registerShutdownHook() {
if (this.shutdownHook == null) {
// No shutdown hook registered yet.this.shutdownHook = newThread(SHUTDOWN_HOOK_THREAD_NAME) {
@