使用線程實現執行方法不影響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);
}
}
}