Как запускать каждые 25 секунд в Quartz scheduler?

#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>