1. 程式人生 > >Springmvc專案啟動後定時執行某個方法

Springmvc專案啟動後定時執行某個方法

需求:在資料庫中有一個表儲存定時釋出的資訊和定時釋出的時間,在專案釋出後,每過5分鐘定時讀一次資料庫,如果到了定時釋出時間就操作釋出。比如定時釋出某幾篇文章,資料庫就儲存文章的id串以及釋出時間.

本文知識呼叫了java.util.Timer類,不能在指定時間執行,使用較多還是2和3方法,所以大家去看大神的這篇吧:

http://gong1208.iteye.com/blog/1773177

一.分類

從實現的技術上來分類,目前主要有三種技術(或者說有三種產品):

  1. Java自帶的java.util.Timer類,這個類允許你排程一個java.util.TimerTask任務。使用這種方式可以讓你的程式按照某一個頻度執行,但不能在指定時間執行。一般用的較少,這篇文章將不做詳細介紹。
  2. 使用Quartz,這是一個功能比較強大的的排程器,可以讓你的程式在指定時間執行,也可以按照某一個頻度執行,配置起來稍顯複雜,稍後會詳細介紹。
  3. Spring3.0以後自帶的task,可以將它看成一個輕量級的Quartz,而且使用起來比Quartz簡單許多,稍後會介紹。

二.java.util.Timer類

1.web.xml配置

<servlet>
   <servlet-name>GenerateWCData</servlet-name>
   <servlet-class>com.modu.secure.view.admin.phone.GenerateWCData</servlet-class>
   <load-on-startup>2</load-on-startup>
 </servlet>

2.繼承httpservlet的類,初始化執行init()方法

public class GenerateWCData extends HttpServlet {
	public void init(){
		Timer timer = new Timer();  
        timer.schedule(new TimerTask() {  
            public void run() {  
                System.out.println("-------設定要指定任務--------");  
            }  
        }, 1000*60*5, 1000*60*5);  
	}	
}
這兒是每過5分鐘執行一次方法



3.模板

public class Test {
	public static void main(String[] args) {  
        //timer1();  
        timer2();  
        //timer3();  
        //timer4();  
    }  
  
    // 第一種方法:設定指定任務task在指定時間time執行 schedule(TimerTask task, Date time)  
    public static void timer1() {  
        Timer timer = new Timer();  
        timer.schedule(new TimerTask() {  
            public void run() {  
                System.out.println("-------設定要指定任務--------");  
            }  
        }, 2000);// 設定指定的時間time,此處為2000毫秒  
    }  
  
    // 第二種方法:設定指定任務task在指定延遲delay後進行固定延遲peroid的執行  
    // schedule(TimerTask task, long delay, long period)  
    public static void timer2() {  
        Timer timer = new Timer();  
        timer.schedule(new TimerTask() {  
            public void run() {  
                System.out.println("-------設定要指定任務--------");  
            }  
        }, 2000*5, 2000*5);  
    }  
  
    // 第三種方法:設定指定任務task在指定延遲delay後進行固定頻率peroid的執行。  
    // scheduleAtFixedRate(TimerTask task, long delay, long period)  
    public static void timer3() {  
        Timer timer = new Timer();  
        timer.scheduleAtFixedRate(new TimerTask() {  
            public void run() {  
                System.out.println("-------設定要指定任務--------");  
            }  
        }, 1000, 2000);  
    }  
     
    // 第四種方法:安排指定的任務task在指定的時間firstTime開始進行重複的固定速率period執行.  
    // Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)  
    public static void timer4() {  
        Calendar calendar = Calendar.getInstance();  
        calendar.set(Calendar.HOUR_OF_DAY, 12); // 控制時  
        calendar.set(Calendar.MINUTE, 0);       // 控制分  
        calendar.set(Calendar.SECOND, 0);       // 控制秒  
  
        Date time = calendar.getTime();         // 得出執行任務的時間,此處為今天的12:00:00  
  
        Timer timer = new Timer();  
        timer.scheduleAtFixedRate(new TimerTask() {  
            public void run() {  
                System.out.println("-------設定要指定任務--------");  
            }  
        }, time, 1000 * 60 * 60 * 24);// 這裡設定將延時每天固定執行  
    }  
}