TOMCAT 啓動完成後Spring 執行某個類的方法——多線程啓動tomcat,spring裝配

以下的3種方法都是在Tomcat啓動過程當中執行的,這樣會影響Tomcat的啓動時間,從而形成Tomcat不能啓動成功: 
1.配置一個Servlet默認自動啓動。 
2.配置一個Listener來啓動 
3.實現spring的InitializingBean接口 

要想不影響Tomcat的啓動,便聯想到了異步調用 。即無非就是新建立了一個線程來單獨執行,這樣Tomcat執行到相應的操做就能夠直接繼續下去了,不會處於等待的狀態,避免了啓動超時。基於這樣的思想,能夠有兩種方法來完成:web

 

方法一:使用如上三種方式中的任何一種來在啓動Tomcat的過程當中執行相應的方法,而後在執行的過程當中使用另外一個線程來執行:好比說將要執行的方法所在的類繼承HttpServlet並在web.xml中配置,而後在該Servlet的init中去調用想要執行的方法時(假設這個方法名叫start()),啓動另外一個線程來執行,具體代碼以下。spring

 

在servlet 初始化方法中啓動要執行的start()方法線程:tomcat

    @Override
    public void init() throws ServletException {
          FutureTask<String> task = new FutureTask<String>(new Callable<String>(){   
              
               @Override  
               public String call() throws Exception {   
            
                   start();
                   
            return "Collection Completed";   
               }   
                   
            });  
          new Thread(task).start();   

    }

 

start()方法:  app

 

 private void start() {
          QualityTestUtil  qualityTestUtil=SpringUtil.getBean("QualityTestUtil");
           System.out.println("spring 裝配了");
           qualityTestUtil.test();
    }

 

spring工具類獲取spring上下文:異步

public class SpringUtil implements ApplicationContextAware {

         private static ApplicationContext applicationContext; // Spring應用上下文環境

         /*

          * 實現了ApplicationContextAware 接口,必須實現該方法;

          *經過傳遞applicationContext參數初始化成員變量applicationContext

          */

         public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
             System.out.println("===================setApplicationContext");
             SpringUtil.applicationContext = applicationContext;
         }



         public static ApplicationContext getApplicationContext() {
                return applicationContext;
         }


          @SuppressWarnings("unchecked")
          public static <T> T getBean(String name) throws BeansException {
                     return (T) applicationContext.getBean(name);
           }

}


tomcat 中配置serlvet:ide

  <servlet>
    <description></description>
    <display-name>ServletUtil</display-name>
    <servlet-name>ServletUtil</servlet-name>
    <servlet-class>com.htjf.util.ServletUtil</servlet-class>
    <load-on-startup>3</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletUtil</servlet-name>
    <url-pattern>/ServletUtil</url-pattern>
  </servlet-mapping>

那麼 你的類將被spring 裝配 而且啓動start方法  可是不影響tomcat啓動工具

相關文章
相關標籤/搜索