Можно проверить, завершился ли метод `@ Scheduled`? - PullRequest
0 голосов
/ 03 марта 2020

Я использую @Scheduled для одного из моих методов.

Есть ли способ проверить, завершилось ли предыдущее задание @Scheduled?

Например, если у нас есть @Scheduled для запуска каждые 60 секунд, но иногда метод занимает 80 секунд. Есть ли способ предотвратить повторный запуск метода, если он не завершен? sh?

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Полагаю, вы используете @Scheduled(fixedRate = 60000)

В этом случае вам не нужно беспокоиться о возможном перекрытии задач, поскольку они выполняются последовательно в одном потоке.

ScheduledAnnotationBeanPostProcessor использует ScheduledTaskRegistrar под капотом, который, в свою очередь, использует ScheduledExecutorService (см. документы и исходный код ).

А из Документы из scheduleAtFixedRate метод ScheduledExecutorService, мы можем ясно видеть, что

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

0 голосов
/ 03 марта 2020

fixedDelay выполняет метод с фиксированным периодом в миллисекунды между концом одного вызова и началом следующего.

Попробуйте с этим

@Scheduled(fixedDelay = 60*1000)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...