applicationContext.registerShutdownHook();

在基於web的ApplicationContext實現中,已有相應的實現來處理關閉web應用時恰當地關閉Spring IoC容器。

       但,如果你正在一個非web應用的環境下使用spring的IoC容器,如dubbo服務,你想讓容器優雅的關閉,並調用singleton的bean相應destory回調方法,你需要在JVM裏註冊一個“關閉鉤子”(shutdown hook)。這一點非常容易做到,並且將會確保你的Spring IoC容器被恰當關閉,以及所有由單例持有的資源都會被釋放。

      爲了註冊“關閉鉤子”,你只需要簡單地調用在org.springframework.context.support.AbstractApplicationContext實現中的registerShutdownHook()方法即可。

  1. package com.hcm.dubbo.service;  
  2.    
  3. import org.slf4j.Logger;  
  4. import org.slf4j.LoggerFactory;  
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  6.    
  7. public class DubboServiceStart {  
  8.    
  9.     private static final Logger LOG = LoggerFactory.getLogger(DubboServiceStart.class);  
  10.    
  11.     public static final String DUBBO_PROVIDER = "spring/dubbo-provider.xml";  
  12.    
  13.     public static void init() {  
  14.    
  15.         LOG.info("開始啓動dubo服務,載入的配置服務提供文件爲[" + DUBBO_PROVIDER + "]");  
  16.    
  17.         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { DUBBO_PROVIDER });  
  18.    
  19.         context.registerShutdownHook();  
  20.         context.start();  
  21.    
  22.         LOG.info("dubbo啓動服務完畢,請查看日誌");  
  23.    
  24.         String[] names = context.getBeanDefinitionNames();  
  25.         System.out.print("Beans:");  
  26.         for (String string : names) {  
  27.             System.out.print(string + ",");  
  28.         }  
  29.         System.out.println();  
  30.     }  
  31.    
  32.     public static void main(String[] args) throws InterruptedException {  
  33.         DubboServiceStart.init();  
  34.         while (true) {  
  35.             try {  
  36.                 Thread.currentThread();  
  37.                 Thread.sleep(3L);  
  38.             } catch (Exception e) {  
  39.                 e.printStackTrace();  
  40.             }  
  41.         }  
  42.     }  
  43.    
  44. }  

eg:普通的案例:
  1. public class WebStart {  
  2.       
  3.     private static String path="classpath:spring-configuration/*.xml";  
  4.       
  5.     //通過AbstractApplicationContext,註銷類實例  
  6.     private static AbstractApplicationContext  context=null;  
  7.       
  8.     public static void startUp(){  
  9.         context=new ClassPathXmlApplicationContext(path);  
  10.         String[] beans=context.getBeanDefinitionNames();  
  11.         System.out.println("count:"+context.getBeanDefinitionCount());  
  12.         for(String str:beans){  
  13.             System.out.println(str);  
  14.         }  
  15.           
  16.     }  
  17.   
  18.     public static void main(String[] args) {  
  19.         startUp();  
  20.         context.registerShutdownHook();//註冊關閉鉤子  
  21.         context.close();  
  22.     }  
  23.   
  24. }  
運行結果:count:49
agentFilmService
agentService
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章