Как стать автором
Обновить

Комментарии 16

еще можно сделать так:
@Scheduled(cron = "* * * * * *")
Прошивать расписание в код в большинстве случаев не есть правильно. Потому работаю по-старинке.
Я уж было приготовился по старой памяти (еще со спринга 2.x) к долгому прикручиванию quartz-а и написании кучи конфигов на xml, как оказалось все значительно проще

Я как раз на днях вспоминал о quartz-е, так как и мне нужно настроить выполнение некого кода по расписанию. А оказывается, можно сделать так. Спасибо!
А вот интересно — сконфигурил я такой аннотацией запуск чего-либо раз в 5 секунд, а потом обнаружил, что это слишком часто/редко. Можно переконфигурить настройки для этого места снаружи?
нет
обидно, на самом деле. Потому что когда в продакшене обнаруживается проблема с настройками планировщика, перекомпилировать и обновлять сервер никто не позволит.
используйте xml конфигурацию, в чем проблема то
Ну в более сложном случае и конфигурация будет сложней — вам надо будет задать свой Trigger, сконфигурировать его из properties-файла и потом дергать задачи используя этот триггер
В этому случае как раз придется писать много xml — и аннотацией не получится воспользоваться

Все подробно написано в спринговой доке — я тут намеренно привел простейний пример
В Play Framework тоже делается довольно просто:

import play.jobs.*;

/** Fire at 12pm (noon) every day **/
@On("0 0 12 * * ?")
public class Bootstrap extends Job {

public void doJob() {
Logger.info("Maintenance job ...");
...
}

}
Есть ещё прекрасная аннотация Every:

@Every(«5min»)
public class Bootstrap extends Job {

}
И я бы сказал, что не «В Play Framework тоже делается довольно просто», а «В Play Framework тоже делается ещё проще», потому что нет никаких конфигурационных xml-файлов.
Отсутствие конфигурационных файлов — это на самом деле недостаток, а не достоинство.

Потому что когда в продакшене обнаруживается проблема с настройками планировщика, перекомпилировать и обновлять сервер никто не позволит.
Должно быть так — аннотациями настраиваешь все из кода, чтобы проще и быстрее было программить; но если надо, нужно иметь возможность переопределить настройки для каких-то задач из файла конфигурации (и лучше всего без перезапуска сервера).
Править xml и перезапускать тоже может быть не очень. Тут нужно смотреть на что-то настраиваемое через JMX или конфиг в БД.
Активно пользуюсь аннотацией @Scheduled. Из недостатков можно отметить невозможность отключения крона (только указав день/месяц/деньНедели максимально отдалённый от текущей даты) и невозможность указания имени треда.
Scheduled понравился больше чем кварц. по-моему он по легче и по стабильнее.
Из интересных моментов хочу добавить:

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

Так что коллеги, если используете Scheduled, не забывайте ваш код оформлять в try-catch

В том же кварце таких глюков не обнаружено. Но с ним тоже были определенные мучения.
Например, задать запуск — каждое воскресение. обязательно напротив дня месяца нужно ставить ?, а не *. Иначе он вообще не запустится

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации