Springmvc專案啟動後定時執行某個方法
阿新 • • 發佈:2019-01-02
需求:在資料庫中有一個表儲存定時釋出的資訊和定時釋出的時間,在專案釋出後,每過5分鐘定時讀一次資料庫,如果到了定時釋出時間就操作釋出。比如定時釋出某幾篇文章,資料庫就儲存文章的id串以及釋出時間.
本文知識呼叫了java.util.Timer類,不能在指定時間執行,使用較多還是2和3方法,所以大家去看大神的這篇吧:
http://gong1208.iteye.com/blog/1773177
一.分類
從實現的技術上來分類,目前主要有三種技術(或者說有三種產品):
- Java自帶的java.util.Timer類,這個類允許你排程一個java.util.TimerTask任務。使用這種方式可以讓你的程式按照某一個頻度執行,但不能在指定時間執行。一般用的較少,這篇文章將不做詳細介紹。
- 使用Quartz,這是一個功能比較強大的的排程器,可以讓你的程式在指定時間執行,也可以按照某一個頻度執行,配置起來稍顯複雜,稍後會詳細介紹。
- 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()方法
這兒是每過5分鐘執行一次方法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); } }
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);// 這裡設定將延時每天固定執行
}
}