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

Выполнение Java-метода в заданное время каждый день

Я относительно новичок в Java, и я заработал проект для работы. Тем не менее, я столкнулся с блоком. Мне нужен метод для запуска в определенное время в течение дня. Я сделал довольно много поисков, но я не могу найти ничего похожего на то, что это будет трюк. Я столкнулся с классом Timer, но, похоже, он запускается через определенные промежутки времени. У класса Scheduler появилась такая же проблема. Я также столкнулся с Кварцем, но я думаю, что мне нужно что-то более легкое, и я мог только видеть, как делать что-то с интервалом.

Возможно, только потому, что я новичок, я пропустил некоторые вещи, которые могут помочь мне в этих классах, но я действительно застрял и мог использовать некоторую помощь.

Если кто-то может указать мне класс, который будет запускать что-то в определенное время суток, каждый день (бонусные баллы за возможность отменить событие), и покажите мне, как правильно использовать класс, это было бы потрясающе!

TL; DR: нужен класс, который делает что-то в день, а не через интервал, потому что программа может быть перезапущена несколько раз в течение дня.

4b9b3361

Ответ 1

попробуйте класс TimerTask

для получения дополнительной информации http://oreilly.com/java/archive/quartz.html

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class ReportGenerator extends TimerTask {

  public void run() {
    System.out.println("Generating report");
    //TODO generate report
  }

}

class MainApplication {

  public static void main(String[] args) {
    Timer timer = new Timer();
    Calendar date = Calendar.getInstance();
    date.set(
      Calendar.DAY_OF_WEEK,
      Calendar.SUNDAY
    );
    date.set(Calendar.HOUR, 0);
    date.set(Calendar.MINUTE, 0);
    date.set(Calendar.SECOND, 0);
    date.set(Calendar.MILLISECOND, 0);
    // Schedule to run every Sunday in midnight
    timer.schedule(
      new ReportGenerator(),
      date.getTime(),
      1000 * 60 * 60 * 24 * 7
    );
  }//Main method ends
}//MainApplication ends

Ответ 2

Я настоятельно рекомендую, если вообще возможно, что лучший подход заключается в вызове вашего приложения script или Java с помощью планировщика ОС: например, "cron" в * nix или "планировщик задач" в Windows.

Ответ 3

Одной из возможностей может быть использование внешнего планировщика - в зависимости от желаемой точности. В UNIX использовать CRON, в Windows использовать Планировщик Windows. Это прекрасно изолирует время от выполнения.

Вы можете использовать таймер и создать простой класс, который проверяет время каждую минуту или 5 минут в зависимости от желаемой детализации. Это будет очень легкий вес.