zoukankan      html  css  js  c++  java
  • 执行代码[置顶] 初探Tomcat源码 —— 关闭钩子

    工作之余抽点时间出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家一起学习一下执行代码

                

                在Tomcat中,通过Catalina的start()来启动服务器Server等组件;然后监听ShutDown命令来调用stop()关闭。

                但是,如果程序没有走上面的流程,非正常关闭,那么stop()的逻辑就没法执行了。荣幸的是,和Java的shutdown钩子一样,Tomcat也供给了自己的关闭钩子。

        JVM的关闭钩子可以参考我的《JVM关闭钩子(2)—— 源码浅析》,主要是Shutdown和ApplicationShutdownHooks两个类。

        

                Tomcat中的关闭钩子--CatalinaShutdownHook,作为一个内部类定义在Catalina中,它继承了Thread,并在run()中调用了Catalina.stop()。

    protected class CatalinaShutdownHook extends Thread {
            public void run() {
                if (server != null) 
                    Catalina.this.stop();
            }
    }

        

        每日一道理
    “上下五千年,龙的看火不灭;古有愚公志,而今从头越…… ”站在新世纪的门槛上,我们的追求就是让祖国灿烂的喜悦飞扬在美好的明天……

                然后在Catalina.start()中,把CatalinaShutdownHook注册到Java的关闭钩子中。实际上Tomcat的关闭钩子就是注册到JVM的关闭钩子中。注册代码如下:

    try {
         if (useShutdownHook) {
            if (shutdownHook == null) 
                shutdownHook = new CatalinaShutdownHook();
            Runtime.getRuntime().addShutdownHook(shutdownHook);
        }
    } catch (Throwable t) { }

          

                另外,在Catalina.stop()中有一段移除关闭钩子的代码,避免重复执行关闭操纵。因为如果能正常关闭服务器的话,就不须要再执行一次关闭钩子了。移除代码如下:

    try {
        if (useShutdownHook) 
            Runtime.getRuntime().removeShutdownHook(shutdownHook);
    } catch (Throwable t) { }

        
            这样,当Tomcat异常关闭,没有执行Catalina.stop(),那么在JVM关闭的时候,就会触发关闭钩子,执行CatalinaShutdownHook.run(),来stop服务器,停止一些退出的清理工作。

        
    ——源代码取自Tomcat 5.0

        

    文章结束给大家分享下程序员的一些笑话语录: 这年头的互联网真是娱乐了中国,网民们从各种各样的“门”里钻来钻去,又有好多“哥”好多“帝”,值得大家品味不已……网络经典语录,关于IT与互联网,经典与您分享!

    --------------------------------- 原创文章 By 执行和代码 ---------------------------------

  • 相关阅读:
    tp5.1 多级控制器
    JS中三个点(...)是什么鬼?
    vue reqwest与fetch的使用
    new Vue({ render: h => h(App), }).$mount('#app')到底什么意思
    ant design vue 表格和国际化的使用
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3095668.html
Copyright © 2011-2022 走看看