Планировщик на основе Spring Annotation, т. Е. @Scheduled не работает непрерывно согласно выражению cron - PullRequest
0 голосов
/ 03 апреля 2020

Я использовал планировщик на основе Spring Annotation @Scheduler и настраивал его запуск каждые 30 секунд. Мой пример кода выглядит примерно так:

Это пример кода службы для использования аннотации планировщика.

 @Service
    public class SchedulerJob
    {
        @Scheduled(cron="*/30 * * * * ?")
        public void demoServiceMethod()
        {
            System.out.println("Job running every 30 seconds");
        }
    }

Приведенный выше код работает нормально и работает каждые 30 секунд, но иногда это не работает. Когда я перезагружаю сервер, он снова начинает работать.

Может кто-нибудь сказать мне причину такого поведения с аннотацией @Scheduler.

Заранее спасибо.

1 Ответ

0 голосов
/ 03 апреля 2020

Установить конфигурацию Spring с аннотацией @EnableScheduling

@Configuration
@EnableScheduling
public class RootConfig { .. }

Хроноподобное выражение, расширить обычное определение UNIX, включив в него триггеры для второго, а также для минуты, часа, дня месяца , месяц и день недели. например, «0 * * * * MON-FRI» означает один раз в минуту в рабочие дни.

cron имеет 60-секундную гранулярность, это не лучший инструмент для использования. Если вы запускаете его так часто, cron не go до субминутных разрешений, вам нужно будет найти другой способ.

Попробуйте использовать выражение initialDelayString, определяющее миллисекунды для задержки перед первым выполнение и fixedDelayString выполнение аннотированного метода с фиксированным периодом в миллисекундах между концом последнего вызова и началом следующего.

@Scheduled(initialDelayString = "${initialDelayString}", fixedDelayString = "${fixedDelayString}")
public void demoServiceMethod()
...