Планирование весны: @Scheduled против Quartz - PullRequest
41 голосов
/ 08 декабря 2010

Я читаю документ Spring 3.0 относительно планирования.Я склоняюсь к SpringDetailBean для Кварца.Тем не менее, аннотация @ Scheduled захватила мой взгляд.Похоже, это еще один способ планирования задачи с помощью Spring Framework.Основываясь на документах, Spring предоставляет три способа планирования:

  1. @ Запланировано
  2. Через кварц
  3. Через таймер JDK

Iне заинтересованы в JDK Timer.Почему я должен выбрать @Scheduled over Quartz?(Когда я упоминаю Quartz, я имею в виду использование оболочки bean-оболочки Spring для Quartz).

Допустим, мой сценарий использования достаточно сложен, и я буду связываться со сторонним веб-сервисом для импорта и экспорта данных через определенные интервалы.

Ответы [ 4 ]

31 голосов
/ 08 декабря 2010

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

Если все, что вам нужно, это запускать методы в bean-компоненте каждые X секунд или по расписанию cron, тогда, вероятно, @Scheduled (или различные опции в <task> config config Spring ) достаточно

9 голосов
/ 14 сентября 2017

Я должен изложить свой собственный опыт использования @Scheduled против Quartz в качестве реализации планирования в приложении Spring.

Планирование заданий имело следующие требования:

  • Конечные пользователи должны иметь возможность сохранять и планировать (определять время выполнения) свои собственные задачи
  • Запланированные задания во время простоя сервера не должны исключаться из очереди заданий

Следовательно, мы должныпопробуйте использовать реализацию Quartz (версия 2.2.3) для поддержки сохранения заданий в базе данных.Вот некоторые основные выводы:

  • Интеграция с приложением Spring 4 MVC совсем не сложна при использовании файла quartz.properties.
  • У нас была возможность выбрать вторую базу данных дляхранение заданий из основной базы данных.
  • Задания, запланированные во время простоя сервера, начинают выполняться, пока сервер запускается.
  • В качестве бонуса нам удалось сохранить в основной базе данных несколько полезных (и больше пользователей)-ориентированная) информация о заданных пользователем запланированных заданиях с использованием пользовательских JobListener и TriggerListener.
  • Quartz - очень полезная библиотека в приложениях с более сложными требованиями к расписанию.
0 голосов
/ 22 мая 2019

Согласно Кварцевая документация

Мы можем использовать еще несколько сложных функций, которых нет в @Scheduler.например:

  1. в Кварце мы можем перевести планировщик в режим ожидания с помощью scheduler.standby(); и перепланировать его с помощью scheduler.start();.
  2. , отключив планировщик перед выполнениемзадание или после этого с scheduler.shutdown(true); и scheduler.shutdown(false);
  3. с сохранением задания для последующего использования, и когда вам нужно задание, вы можете запустить его.

JobDetail job1 =newJob(MyJobClass.class). withIdentity("job1","group1"). storeDurably(). build();

Добавьте новое задание в планировщик, указав ему «заменить» существующее задание с указанным именем и группой (если есть).

JobDetail job1 = newJob(MyJobClass.class). withIdentity("job1", "group1"). build();

0 голосов
/ 28 февраля 2019

Весной вы можете запланировать задачу, используя FixedRate, FixedDelay и cron.Но большая часть запланированной работы требует динамической обработки времени выполнения.Поэтому в этом сценарии лучше использовать Quartz, так как он позволяет хранить запланированные задания в DBJobstore, а также в RAMJobstore.

...