Подтвердить что ты не робот

Как я могу запустить мой TimerTask каждый день 2 PM

Я хочу выполнить работу каждый день 2 вечера. Какой метод java.util.Timer я могу использовать для планирования моей работы?

После 2Hrs Run он остановит работу и перенесет на следующий день 2PM.

4b9b3361

Ответ 1

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

    }

}

Ответ 2

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

Ответ 3

Вы можете использовать метод Timer.schedule(TimerTask task, Date firstTime, long period), установив firstTime в 2PM сегодня и настройку period до 24 часов:

Запланирует указанную задачу для повторного выполнения с фиксированной задержкой, начиная с указанного времени. Последующие казни выполняются примерно через равные промежутки времени, разделенные на указанный период.

Ответ 4

Самый простой способ, которым я нашел это, всегда заключался в планировщике заданий в Windows и cron в Linux.

Однако для Java взгляните на Quartz Scheduler

На своем веб-сайте:

Quartz - полнофункциональная служба планирования заданий с открытым исходным кодом, которая может быть интегрированным с или использовать по существу практически любые Java EE или Java SE - от самого маленького автономного приложения до крупнейшей системы электронной коммерции. Кварц можно использовать для создания простых или сложные графики для выполнения десятков, сотен или даже десятки тысяч рабочих мест; задания, задачи которых определяются как стандартные Компоненты Java, которые могут выполнять практически все, что вы можете запрограммировать их делать. Планировщик Quartz включает в себя множество бизнес-классов таких как транзакции JTA и кластеризация.

Ответ 5

Вам следует попробовать использовать scheduleAtFixedRate (это повторит вашу задачу). Вам нужно будет создать объект TimerTask, который будет указывать, что нужно запускать (в run()) и при запуске (scheduleExecutionTime). scheduleAtFixedRate также позволяет указать первую дату выполнения.

Ответ 6

использовать публичное расписание void (задача 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);

Ответ 7

Почему бы вам не использовать Spring @Scheduled (cron = "0 0 14 * * *" ).. для сек, мин, часов, дня, месяца, дняOfWeek. V Прохладный. Вы даже можете указать 9-11 для 9:00 - 11:00, или 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 в классе Application.java(класс содержит основной метод), чтобы сделать Spring осведомленным о том, что вы используете taskcheduler в своем приложении.