久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    SpringBoot優雅退出

     編程一生 2022-03-09

    背景

    我看了一些介紹SpringBoot源碼的文章,里面都是從SpringApplication這個外部調用入口開始,重點介紹里面的listener監聽器。今天我想想說說SpringBoot的優雅退出機制。

    調用入口調用SpringApplication開始啟動SpringBoot

    @SpringBootApplicationpublic class Application {    public static void main(String[] args) throws Exception {        SpringApplication.run(Application.class, args);    }}

    SpringApplication實例初始化時有以下操作

    public SpringApplication(Object... sources) {    this.bannerMode = Mode.CONSOLE;    this.logStartupInfo = true;    this.addCommandLineProperties = true;    this.headless = true;    this.registerShutdownHook = true;    this.additionalProfiles = new HashSet();    this.initialize(sources);}

    其中有一步this.registerShutdownHook注冊jvm退出前的事件。

    概念

    jvm有shutdwonHook機制,中文習慣叫優雅退出。相當于在linux系統中執行SIGTERM(kill -15 或者 svc -d)時退出前執行的一些操作。

    原理

    以linux系統為例說明:

    進程在響應kill -15 pid命令進行關閉操作時默認發送SIGTERM信號至指定進程/進程組。如果進程沒有捕獲該信號的邏輯,則SIGTERM的作用是終止進程。而registerShutdownHook=true說明有注冊的事件需要捕獲該信號,先執行相應的邏輯再進行終止。

    /*** Register a shutdown hook with the JVM runtime, closing this context* on JVM shutdown unless it has already been closed at that time.* <p>Delegates to {@code doClose()} for the actual closing procedure.@see Runtime#addShutdownHook@see #close()@see #doClose()*/@Overridepublic void registerShutdownHook() {   if (this.shutdownHook == null) {      // No shutdown hook registered yet.      this.shutdownHook = new Thread() {         @Override         public void run() {            synchronized (startupShutdownMonitor) {               doClose();            }         }      };      Runtime.getRuntime().addShutdownHook(this.shutdownHook);   }}

    如上面spring里registerShutdownHook的源碼所示,就是注冊一個jvm的shutdownHook鉤子函數。jvm退出前會執行這個鉤子函數。這個關閉操作在強制退出的時候不起作用。強制關閉范圍詳見下圖


    一個SpringBoot項目在優雅退出時做的事情可以通過log來感受一下

    2019/06/20 20:47:20.405 Thread-29 [INFO] NettyHttpServer (NettyHttpServer.java:171) Close NettyHttpServer bind 0.0.0.0/0.0.0.0:5080
    2019/06/20 20:47:20.405 Thread-36 [INFO] AnnotationConfigApplicationContext (AbstractApplicationContext.java:984) Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@a37aefe: startup date [Thu Jun 20 20:45:38 CST 2019]; root of context hierarchy
    2019/06/20 20:47:20.406 Thread-32 [INFO] NettyServer (NettyServer.java:130) stopping netty server(XXX:9000), sleep 6 seconds!
    2019/06/20 20:47:20.407 Thread-35 [INFO] ScheduleManager (ScheduleManager.java:373) Before taskNode quit,check executing task and callback result.
    2019/06/20 20:47:20.407 Thread-35 [INFO] ScheduleManager (ScheduleManager.java:228) Destroy task node resources: zk and threadpool.
    2019-06-20 20:47:20,430 Thread-35 WARN Unable to register Log4j shutdown hook because JVM is shutting down. Using SimpleLogger

    總結

    分析問題先找抓手 

      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 国产精品久久久久影院| 中文字幕AV无码一二三区电影| 久久久久久久久久久免费精品| 亚洲性线免费观看视频成熟 | 超频97人妻在线视频| 国产成人午夜福利院| 五月丁香综合缴情六月小说| 奇米四色7777中文字幕| 丁香五月亚洲综合在线国内自拍| 国产成人综合欧美精品久久| 97成人碰碰久久人人超级碰oo| 日本高清视频色WWWWWW色| 伊人久久无码大香线蕉综合| 好大好深好猛好爽视频| 精品无人区无码乱码毛片国产| 亚洲精品成人福利网站| 久久久久香蕉国产线看观看伊| 精精国产XXX在线观看| 中文有无人妻vs无码人妻激烈| 伊人色综合久久天天小片| 在线涩涩免费观看国产精品| 中文字幕无码不卡免费视频| 人妻精品动漫H无码中字| 国产精品乱码久久久久久软件| 国产成人无码免费网站| 国产精品多p对白交换绿帽| 欧美人与动人物牲交免费观看 | 97精品国产一区二区三区| 国产超碰无码最新上传| 日本精品人妻无码77777| 丰满爆乳在线播放| 亚洲精品麻豆一区二区| 成人H视频在线观看| 国产精品一区二区久久不卡| 东京热人妻丝袜无码AV一二三区观| 狠狠色噜噜狠狠狠7777奇米| 亚洲综合小说另类图片五月天| 亚洲欧洲日韩精品在线| 色悠久久久久综合网伊| 99久久国产综合精品女图图等你| 99热精品毛片全部国产无缓冲 |