Tomcat啓動執行方法

使用線程實現執行方法不影響Tomcat的正常啓動。

web.xml:

<!-- 配置tomcat 初始化數據 -->
<servlet>
    <servlet-name>event-collector</servlet-name>
    <servlet-class>com.hanshow.wise.base.delivery.servlet.NucleonEventProcessor</servlet-class>
    <!-- 項目啓動的順序,在多個項目中執行方法依賴其他模塊,配置變大點 -->
    <load-on-startup>5</load-on-startup>
</servlet>
	
<servlet-mapping>
    <servlet-name>event-collector</servlet-name>
    <url-pattern>/event-collect</url-pattern>
</servlet-mapping>

Java實現:

package com.hanshow.wise.base.goods.servlet;

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

/**
 * Tomcat啓動執行方法
 * @author ZHJ
 * @date 2018年9月18日
 * @since 1.0.0
 */
@Component("processor")
public class NucleonEventProcessor extends HttpServlet {
    Logger logger = LoggerFactory.getLogger(NucleonEventProcessor.class);
    private static final long serialVersionUID = -9045451275234606838L;
    // Servlet的init方法會在Tomcat啓動的時候執行
    @Override
    public void init() throws ServletException {
        FutureTask<String> task = new FutureTask<String>(new Callable<String>(){
            @Override
            public String call() throws Exception {
                start(); // 使用另一個線程來執行該方法,會避免佔用Tomcat的啓動時間
                return "Collection Completed";
            }
        });
        new Thread(task).start();
    }

    private void start() {// 希望Tomcat啓動結束後執行的方法
        try{
            Object sigLock = new Object();
            synchronized (sigLock) {
                // 調用的執行方法
                new StaticCategory();
            }
        }catch(Exception e){
            System.out.println(e);
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章