2013-02-08 2 views
0

мне нужно AutoSend отчеты моих клиентов в perticular тайминги какВызов метода каждый день, каждую неделю, каждый месяц и каждый год

  • каждый день в 00:01 утра
  • каждую неделю в воскресенье 00 : 1 утра
  • на 1-й день каждого месяца
  • на 1-й день каждого года

За каждый день я делаю это:

public void contextInitialized(ServletContextEvent arg0) { 

     System.out.println("context initiallized"); 
     System.out.println("Starting timer"); 

     Calendar calendar = Calendar.getInstance(); 
     calendar.set(Calendar.HOUR_OF_DAY, 0); 
     calendar.set(Calendar.MINUTE, 1); 
     calendar.set(Calendar.SECOND, 0); 

     Date alarmTime = calendar.getTime(); 

     _timer = new Timer(); 
     _timer.schedule(new AlarmTask(), alarmTime); 
    } 

Вот класс, где я выполнить мою повседневную задачу:

public class AlarmTask extends TimerTask { 

    public void run() { 
     // Do your work here; it's 00:01 AM!   
    } 
} 

Это, кажется, работает нормально НО когда я начать в любое время кота после 00:01 AM Say в 02:30 утра в задача выполняется, как только контекст загружается, когда мне нужно, чтобы он выполнялся на следующий день ...

Есть ли у них какие-либо проблемы с моим кодом?

ответ

2

Calendar моделирует полную дату, поэтому вы запланировали в прошлом. Timer ответит на это, выполнив сразу же. Увеличьте день на Calendar.

1

Вы смотрели на Quartz? Это может помочь вам спланировать свои задачи!

0

Я думаю, у вас будет делать то, что было сказано выше https://stackoverflow.com/a/14781326/2040095

но кроме Марко Топольник делать у также должны вызывать 3 параметры формы метода «графика» для класса Timer, так как вам нужен этот отчет для отправки каждый день, а не только один день?

Так что-то вроде

_timer.schedule(new AlarmTask(), alarmTime, period); 

где период бы 24 часа для ежедневных отчетов.

0

Если вы делаете это в огромных проектах, я предпочитаю, чтобы вы перешли к Quartz Schedular, поскольку он имеет пользовательский интерфейс для обработки заданий и создания и редактирования заданий. Если это всего лишь небольшая задача тревоги, которая должна выполняться, периодически разбивать пакетный файл и добавлять его к заданию chron для запуска через определенные промежутки времени.

Надеюсь, это поможет ..

Смежные вопросы