Tomcat啟動時自動加載Servlet


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();  
    } 
 
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM