1、想做一個服務啟動時自動啟動一不停止的獲取訂閱功能
2、之前是做一個Jsp頁面請求servlet來觸發方法
3、現在實現Tomcat啟動時自動加載Servlet
1、Tomcat中啟動Servlet時,只需要在Servlet所在的工程的配置文件web.xml中寫成如下即可
<!-- 自動啟動訂閱接口 --> <servlet> <servlet-name>TimeServlet</servlet-name> <servlet-class>servlet.TimeServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>TimeServlet</servlet-name> <url-pattern>/servlet/TimeServlet</url-pattern> </servlet-mapping>
所以最主要的是加一句:<load-on-startup>1</load-on-startup>
2、在Servlet中寫一個初始化方法,servlet名字要根據配置的一致。TimeServlet
package servlet; import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; import javax.servlet.http.HttpServlet; import log.LogTimerTask; import topic.TmallTopic; /** * 服務器啟動時自動啟動線程 * @author chenv 2016-9-13 * */ public class TimeServlet extends HttpServlet { private static final long serialVersionUID = 1L; public TimeServlet() { super(); } public void init(){ //線程一,啟動天貓訂閱 Thread t1=new Thread(){ public void run(){ TmallTopic topic = new TmallTopic(); topic.openTopic(); //System.out.println("異步啟動天貓訂閱"); } }; t1.start(); //線程二,啟動日志記錄 Thread t2 = new Thread(){ public void run(){ TimerTask task = new LogTimerTask(); Calendar calendar= Calendar.getInstance(); Date firstTime = calendar.getTime(); //間隔:1小時 long period = 1000*60*60; Timer timer = new Timer(); timer.schedule(task, firstTime, period); } }; t2.start(); } }
Tomcat啟動時自動加載Servlet就可以了。
擴展:
servlet定時輸出
package servlet; import java.io.IOException; import java.util.Timer; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; public class TimeServlet extends HttpServlet { private static final long serialVersionUID = 1L; public TimeServlet() { super(); } public void init() throws ServletException { Timer timer = new Timer(); timer.schedule(new MyTask(), 1000, 2000);// 在1秒后執行此任務,每次間隔2秒,如果傳遞一個Data參數,就可以在某個固定的時間執行這個任務. // 這個是用來停止此任務的,否則就一直循環執行此任務了 while (true){ try { int ch = System.in.read(); //輸入字符“c”,回車即停止執行 if (ch - 'c' == 0){ timer.cancel();// 使用這個方法退出任務 } } catch (IOException e) { e.printStackTrace(); } } } //具體執行的任務 class MyTask extends java.util.TimerTask{ public void run() { System.out.println("____ok____"); } } public void destroy() { super.destroy(); } }
