我想每天下午2點執行一項工作。 java.util.Timer
哪種方法可以用來安排我的工作?如何我可以每天運行我的TimerTask 2 PM
經過2Hrs運行後,它將停止工作並重新安排下一天的下午2點。
我想每天下午2點執行一項工作。 java.util.Timer
哪種方法可以用來安排我的工作?如何我可以每天運行我的TimerTask 2 PM
經過2Hrs運行後,它將停止工作並重新安排下一天的下午2點。
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Timer;
import java.util.TimerTask;
public class MyTimerTask extends TimerTask {
private final static long ONCE_PER_DAY = 1000*60*60*24;
//private final static int ONE_DAY = 1;
private final static int TWO_AM = 2;
private final static int ZERO_MINUTES = 0;
@Override
public void run() {
long currennTime = System.currentTimeMillis();
long stopTime = currennTime + 2000;//provide the 2hrs time it should execute 1000*60*60*2
while(stopTime != System.currentTimeMillis()){
// Do your Job Here
System.out.println("Start Job"+stopTime);
System.out.println("End Job"+System.currentTimeMillis());
}
}
private static Date getTomorrowMorning2AM(){
Date date2am = new java.util.Date();
date2am.setHours(TWO_AM);
date2am.setMinutes(ZERO_MINUTES);
return date2am;
}
//call this method from your servlet init method
public static void startTask(){
MyTimerTask task = new MyTimerTask();
Timer timer = new Timer();
timer.schedule(task,getTomorrowMorning2AM(),1000*10);// for your case u need to give 1000*60*60*24
}
public static void main(String args[]){
startTask();
}
}
我發現做這件事最簡單的方法一直是通過Windows中的Task Scheduler和Linux中的cron。
但是對Java,看看Quartz Scheduler
從他們的網站:
石英是可以 與集成,或者伴隨一個全功能的,開源的作業調度服務幾乎任何Java EE或Java SE應用程序 - 從最小的獨立應用程序到最大的電子商務系統。石英可用於創建簡單的或複雜的計劃,用於執行數十,數百或甚至數十萬個作業;其任務被定義爲標準的作業 Java組件,可以執行幾乎任何你可能編程的任何東西 他們要做的事情。 Quartz Scheduler包含許多企業級功能,例如JTA事務和集羣。
你可以使用Timer.schedule(TimerTask task, Date firstTime, long period)
方法,今天設置firstTime
到下午和設置period
至24小時:
安排指定的任務進行重複的固定延遲執行,在指定的時間開始。隨後的執行大致按規定的時間間隔進行,並按指定的時間間隔分開。
這是一個非常簡單的方法 – 2012-02-21 10:38:08
@SunilKumarBM,是一個正面還是負面? – hmjd 2012-02-21 10:38:53
顯然是積極的,這就是爲什麼我已經投票了。即使我使用相同的方法:-) – 2012-02-21 10:40:08
你應該嘗試使用scheduleAtFixedRate(這將重複你的任務)。您將需要創建一個TimerTask對象,該對象將指定要運行的內容(在run()中)以及何時運行(scheduledExecutionTime)。 scheduleAtFixedRate還允許您指定第一個執行日期。
使用公共無效調度(TimerTask的任務,日期firstTime,週期長)
作任務再次重複了第二天,剛剛成立時期86400000毫秒(這意味着1天)
Date date2pm = new java.util.Date();
date2pm.setHour(14);
date2pm.setMinutes(0);
Timer timer = new Timer();
timer.sc(myOwnTimerTask,date2pm, 86400000);
Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 2);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);
// every night at 2am you run your task
Timer timer = new Timer();
timer.schedule(new YourTask(), today.getTime(), TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS)); // period: 1 day
你爲什麼不使用Spring的@Scheduled(的cron = 「0 0 14 * * *」)..爲秒,分鐘,小時,天,月,星期。 V酷。您甚至可以在9:00至11:00之間指定9-11,或在最後一個參數中指定MON-FRI。 如果你想在運行時設置時間,你也可以用編程方式調用它,就像Spring的大部分情況一樣。 看到這個: - http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html
添加一個例子
@Scheduled(cron="0 0 14 * * *")
public void customScheduler(){
try{
// do what ever you want to run repeatedly
}catch(Exception e){
e.printStackTrace();
}
}
還請標註含此@Component來註解類,並請在應用程序提供@EnableScheduling。java(類包含主要方法)類使Spring知道您在應用程序中使用了taskscheduler。
請記住[夏令時](http://en.wikipedia.org/wiki/Daylight_saving_time) – 2012-02-21 10:31:30
我得到了我的答案之一,但如何在2小時後停止任務並將其重新安排到第二天 – BOSS 2012-02-21 11:07:18