Je veux exécuter un travail tous les jours À 14H. Quelle méthode de java.util.Timer
puis-je utiliser pour planifier mon travail ?
Après 2 heures, exécutez-le pour arrêter le travail et reprogrammer le jour suivant à 14 HEURES.
Je veux exécuter un travail tous les jours À 14H. Quelle méthode de java.util.Timer
puis-je utiliser pour planifier mon travail ?
Après 2 heures, exécutez-le pour arrêter le travail et reprogrammer le jour suivant à 14 HEURES.
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
Vous pouvez utiliser la méthode Timer.schedule(TimerTask task, Date firstTime, long period)
, définir firstTime
à 14 HEURES aujourd'hui et définir period
24 heures :
Planifie la tâche spécifiée pour une exécution à retard fixe répétée, en commençant à l'heure spécifiée. Les exécutions ultérieures ont lieu à intervalles approximativement réguliers, séparés par la période spécifiée.
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();
}
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.