Tomcat啟動時自動運行某程序
項目需要和tmall實現長連接,接收tmall推送的Order消息,然後對消息進行邏輯處理。
目前寫了一個servlet,實現了permit的驗證,然後對tmall進行長連接操作,啟動後,只要tomcat一直運行著,長連接就不會斷掉。現在的需求是tomcat啟動後我這個servlet自己就運行起來,不用我自己再去訪問一下配置的servlet路徑。
資料:
http://www.cnblogs.com/Payne-Wang/archive/2013/04/01/loadOnTomcatStartup.html
https://blog.csdn.net/csnewdn/article/details/54618366
https://www.cnblogs.com/wdpnodecodes/p/8025134.html
有兩種方法實現需求
方法一:servlet裏面重寫init()方法
第一步:自定義一個servlet,重寫init()方法
public class GetMessageFromTBServlet extends HttpServlet { @Override public void init() throws ServletException { super.init(); System.out.println("開始了。。。。。"); if ( MessageWork.getPermit()) {try { MessageWork.getMessageFromTaoBao(); } catch (Exception e) { e.printStackTrace(); } } }
第二步:配置web.xml 映射servlet地址,並添加啟動優先級
<load-on-startup>N</load-on-startup> 的含義是:標記容器是否在啟動的時候就加載這個servlet。當值為0或者大於0時,表示容器在應用啟動時就加載這個servlet;當是一個負數時或者沒有指定時,則指示容器在該servlet被選擇時才加載。正數的值越小,啟動該servlet的優先級越高。
方法二:servlet的Listener監聽器
第一步:自定義一個listener 實現javax.servlet.ServletContextListener接口,同時實現該接口的contextInitialized(ServletContextEvent event)和contextDestroyed(ServletContextEvent event)兩個接口函數。
MessageListener 類
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.util.Timer;
public class MessageListener implements ServletContextListener {
private Timer timer=null;
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
timer=new Timer(true);
servletContextEvent.getServletContext().log("start");
timer.schedule(new MessageTask(servletContextEvent.getServletContext()),10*1000,5*1000);
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
MessageTask類
import Intermediate_system.message.MessageTest; import javax.servlet.ServletContext; import java.util.TimerTask; public class MessageTask extends TimerTask { private static boolean isRunning=false; private ServletContext context=null; public MessageTask(ServletContext context){ this.context=context; } @Override public void run() { if (!isRunning) { isRunning=true; //指定任務 MessageTest.getPermit(); isRunning=false; }else { context.log("任務還沒有結束"); } } }
第二步:web.xml裏面配置listener
servlert啟動優先級
<load-on-startup>1</load-on-startup> 標記容器在啟動時加載此servlet。當值為0或者大於0時,表示web容器在應用啟動時就加載這個servlet;
當是一個負數時或者沒有指定時,則指示容器在該servlet被選擇時才加載; 正數的值越小,啟動該servlet的優先級越高。
Tomcat啟動時自動運行某程序