作家
登录

常见Java应用如何优雅关闭

作者: 来源: 2017-12-19 11:04:37 阅读 我要评论

refreshContext()办法比较简单:

  1. private void refreshContext(ConfigurableApplicationContext context) {   
  2.     refresh(context);   //调用ApplicationContext.refresh() 
  3.     if (this.registerShutdownHook) {        //registerShutdownHook默认值为true 
  4.         try { 
  5.             context.registerShutdownHook(); 
  6.         } 
  7.         catch (AccessControlException ex) { 
  8.             // Not allowed in some environments. 
  9.         } 
  10.     } 

AbstractApplicationContext.registerShutdownHook()代码:

二、Linux的旌旗灯号机制

  1. public void registerShutdownHook() {   
  2.     if (this.shutdownHook == null) { 
  3.         this.shutdownHook = new Thread() { 
  4.             @Override 
  5.             public void run() { 
  6.                 synchronized (startupShutdownMonitor) { 
  7.                     doClose(); 
  8.                 } 
  9.             } 
  10.         }; 
  11.         Runtime.getRuntime().addShutdownHook(this.shutdownHook); 
  12.     } 

很明显,Spring boot经由过程在启动时,向JVM注册一个ShutdownHook,大年夜而实现JVM封闭前,正常封闭Spring容器。而Spring在烧毁时,会依次调用bean的destroy动作来烧毁。

五、Dubbo的优雅封闭策略

Dubbo同样是基于ShutdownHook实现的。

AbstractConfig的static代码:

  1. static {   
  2.     Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { 
  3.         public void run() { 
  4.             if (logger.isInfoEnabled()) { 
  5.                 logger.info("Run shutdown hook now."); 
  6.             } 
  7.             ProtocolConfig.destroyAll(); 
  8.         } 
  9.     }, "DubboShutdownHook")); 

六、总结

只要我们的应用运行在linux平台上,所有的优雅封闭筹划都是基于linux供给的旌旗灯号机制供给的,JVM也是如斯。


  推荐阅读

  全年盘点:2017数据中心领域的10大新闻事件

买与卖2017年数据中间市场处于持续变更的状况。客户加快向云端迁徙带来的压力,再加上部件缺乏,使得数据中间>>>详细阅读


本文标题:常见Java应用如何优雅关闭

地址:http://www.17bianji.com/lsqh/39920.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)