#java #quartz-scheduler #cronexpression
#java — язык #quartz-планировщик #cronexpression #java
Вопрос:
Я использую Quartz Scheduling API для Java. Не могли бы вы помочь мне запускать каждые 25 секунд, используя cron-выражение. Это просто задержка. Это не обязательно должно начинаться всегда со второго 0. Например, последовательность такая: 0:00, 0:25, 0:50, 1:15, 1:40, 2:05, и т.д. до 5-й минуты, когда последовательность начинается снова со второго 0. Спасибо.
Ответ №1:
Я не думаю, что выражение cron позволит вам это сделать, но вы можете использовать
SimpleScheduleBuilder.repeatSecondlyForever( 25 )
поскольку 300 (5 минут) кратно 25, он будет повторяться автоматически.
Ответ №2:
Если вы хотите, чтобы задание запускалось с регулярным интервалом, вы можете использовать Quartz SimpleTrigger
с repeatInterval
указанным.
Комментарии:
1. Это правильный ответ на этот вопрос, выражения chron не созданы для этой конкретной задачи.
Ответ №3:
С Quartz 2.1.5 это поможет:
CronTrigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.withSchedule(cronSchedule("0/20 * * * * ?"))
.build();
Комментарии:
1. Это выполняется каждые 20 секунд, что работает, потому что 60 кратно 20. OP явно запрашивается каждые 25 секунд, для которых это не сработает.
Ответ №4:
Единственный способ сделать это с помощью триггера cron настолько сложен, что бесполезен; вам намного лучше использовать SimpleTrigger из других ответов. Тем не менее, если это должен быть cron, вам нужно настроить пять разных триггеров cron:
0/25 0/5 * * * *
15/25 1/5 * * * *
5/25 2/5 * * * *
20/25 3/5 * * * *
10/25 4/5 * * * *
Первый триггер срабатывает при 0:00:25, 0:00:50; затем второй триггер срабатывает в 0:01:15 и 0:01:40; третий в 0:02:05, 0:02:30, 0:02:55; четвертый на 0:03:20, 0:03:45; и, наконец, пятый в 0:04:10 и 0:04:35. Затем первый триггер снова запускается в 0: 05:00 и т.д.
Это работает только потому, что 25 секунд равномерно делятся на 5 минут (которые, в свою очередь, равномерно распределяются на час). Если бы вы хотели, чтобы это происходило каждые 23 секунды? Забудьте об этом!
Ответ №5:
*/25 * * * * *
— [wiki] http://en.wikipedia.org/wiki/Cron
— [руководство по quartz] http://www.quartz-scheduler.org/docs/tutorial/TutorialLesson06.html
Комментарии:
1. Логически кажется, что это должно работать, но это не так с моей версией quartz (2.0.1). Он перезапускается с 0 секунд каждую минуту, как 0/25.
2. Это не каждые 25 секунд, но последовательность секунд выглядит следующим образом: 0 — 25 — 50 — 0
Ответ №6:
У вас не может быть такого расписания для quartz.
Единственное, что вы могли бы сделать, это запланировать выполнение задания-оболочки каждые 5 секунд и выполнять какую-либо работу только при каждом пятом выполнении.
Ответ №7:
Вы могли бы запланировать выполнение задания постоянно, но регулировать частоту с помощью Camel’s Throttler.
<route>
<from uri="jms:queue:TestQueue"/>
<!-- throttle 1 messages per 25 sec -->
<throttle timePeriodMillis="25000">
<constant>1</constant>
<to uri="bean:TestBean?method=testMethod"/>
</throttle>
</route>