Динамический сервис изменения таймера или кварц - PullRequest
1 голос
/ 23 ноября 2011

Нам нужно запланированное задание на сервере Java EE, и мы знаем, как использовать Quartz или службу таймера.

Но наш вопрос: если мы хотим изменить график производства или вручную запустить пакет, как это сделать?

В традиционном решении мы используем сервлет для запуска задания. А затем используйте cronjob с http-клиентом (т.е. lynx) для запуска сервлета. Это легко реализовать и может измениться на производстве.

1 Ответ

0 голосов
/ 15 января 2013

Я никогда не находил таймеры полностью удовлетворительными из-за этой конкретной проблемы: вы не можете реально контролировать их состояние или изменять их.

Что я рекомендую, так это класс менеджера заданий второго уровня.Когда вы вызываете этот класс, он планирует таймер Java EE на время «X», а также записывает тот факт, что вы хотите выполнить «задание» в момент «X».Когда наступает это время, таймер Java EE вызывает этот класс диспетчера заданий, который находит задание и вызывает задание.

То, что это позволяет вам сделать, - это написать «внеплановую» функцию.Вызов без расписания может привести к удалению задания.Когда таймер Java EE вызывает время «X», этот класс не находит никакой работы и поэтому игнорирует ее.

Вы также можете реализовать функцию «изменить расписание», которая удаляет старую запись и создает новуюзапись во время 'Y', планируя таймер Java EE на время 'Y'.Таймер Java EE прибудет как во время «X», так и в другое время во время «Y», но будет иметь значение только время «Y».

Таким образом, ручной запуск заключается в наличии сервлета, который вызывает «изменение»планировать »прямо сейчас.

Еще одна деталь, о которой следует помнить: поскольку события таймера не совсем надежны, мы реализуем этот класс, чтобы найти все задания, которые были запланированы до текущего времени, и запустимвсе они в тот момент.Затем мы планируем дополнительные события таймера Java EE на каждые 5 минут или около того.Эти таймеры подберут любую работу, которая по тем или иным причинам была оставлена ​​позади.Это важно, если ваша очередь заданий постоянна, то, возможно, при перезапуске сервера он отключается как раз в тот момент, когда должен был отключиться таймер.Нет проблем: события Java EE Timer сами по себе не имеют значения, они просто служат для пробуждения обработчика заданий, поэтому он может запускать все устаревшие задания.

...