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启动工具

相关文章
相关标签/搜索