2011-12-17 1 views
5

У меня есть приложение Java EE, которое загружает цены на акции из Интернета каждые пятнадцать минут. С точки зрения точности времени лучше всего использовать приложение для интернализации этой периодической операции, т. Е. Использовать Thread.sleep() в сочетании с счетчиком или настроить таймер. Или было бы лучше разоблачить задачу через URL-адрес и получить задание на платформу cron по URL-адресу периодически (на требуемой частоте, конечно).Используйте Thread.sleep(), задание таймера или платформы cron для периодической работы в приложении Java EE

Каковы плюсы и минусы обоих подходов?

Я был напуган ошибкой таймера, которую я видел, сообщается против реализации OpenJDK. Баг сказал, что изменения в системном времени повлияли на работу связанных с временем операций и методов, таких как спящий режим и таймер.

+1

Вы должны рассмотреть вопрос об использовании Quartz. – fge

+0

Зачем кому-то менять системное время? –

+0

Связанные: http://stackoverflow.com/questions/7499534/applicationscope-bean-that-uses-a-timertask-sheduler-good-or-bad/7499769#7499769 и http://stackoverflow.com/questions/5357033/background-timer-task-in-jsp-servlet-web-application/5357856 # 5357856 – BalusC

ответ

1

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

  • Как было предложено, Кварц - хороший выбор.
  • Cron - неплохо, но для интеграции с заданием потребуется больше настроек.
  • Если на Java EE вы можете использовать таймер EJB.
  • Вы можете свернуть свой собственный с ScheduledExecutorService (не рекомендуется)
1

Thread.sleep не рекомендуется периодически выполнять код. Это неточно и обычно является признаком плохого дизайна. Я предлагаю вам использовать класс Timer, чтобы легко планировать выполнение кода периодически.

2

Timer не является устаревшим, но теперь существует лучшая альтернатива: SheduledExecutorService. Одним из лучших способов является то, что он использует относительное время, а не абсолютное время для планирования.

Использование внешнего скрипта cron или внутреннего таймера - это только вопрос или предпочтение, ИМХО. Внутренний таймер проще настроить, но если у вас уже есть другие кроссы, вы можете использовать дополнительный и иметь эту ответственность в одном месте.

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