Запуск метода Java в установленное время каждый день - PullRequest
13 голосов
/ 06 августа 2011

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

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

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

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

Ответы [ 3 ]

28 голосов
/ 06 августа 2011

попробуйте класс 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
4 голосов
/ 06 августа 2011

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

2 голосов
/ 06 августа 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...