Как запускать каждые 25 секунд в планировщике кварца?

Я использую API Quartz Scheduling для 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.

Ответ 3

Единственный способ сделать это с помощью триггера 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 секунды? Забудьте об этом!

Ответ 4

С Quartz 2.1.5 это поможет:

CronTrigger trigger = newTrigger()
    .withIdentity("trigger1", "group1")
    .withSchedule(cronSchedule("0/20 * * * * ?"))
    .build();

Ответ 6

У вас не может быть такого графика для кварца.

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

Ответ 7

Вы можете запланировать выполнение задания, но уменьшите частоту с помощью Camel 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>