Spring's @Scheduled (fixedDelay = ...) останавливается в полночь - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть приложение Spring Boot, которое использует аннотацию @Scheduled с фиксированной задержкой. Аннотация используется в разных классах с разными задержками. Однако в полночь каждый день все запланированные задачи перестают выполняться.

Кто-нибудь знает, почему это может происходить? Я не могу найти объяснения в Интернете.

(Я использую версию 2.0.2.RELEASE Spring Boot и 5.0.6.RELEASE Spring Core.)

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

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018
@Scheduled(fixedDelay = 1000)
 void scheduleFixedDelayTask() {
   System.out.println(
  "Fixed delay task - " + System.currentTimeMillis() / 
 1000);
  }

В этом случае продолжительность между окончанием последнего выполнения и началом следующего выполнения является фиксированной. Задача всегда ожидает завершения предыдущего.

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

Так что задерживайте так, чтобы предыдущее выполнение завершилось.

Надеюсь, это поможет.

0 голосов
/ 28 ноября 2018

Спасибо всем, кто ответил.

Как оказалось, с Spring это не было проблемой.Оказалось, что задачи остановлены, потому что журналы остановились.На самом деле произошло то, что наши сценарии, которые следят за журналами, не были достаточно умными для обработки файлов журналов, которые катятся в полночь (лицо ладони).

0 голосов
/ 15 ноября 2018

Я не уверен, что вы имеете в виду, когда прекращаете работу.

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

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

Если вы просто имеете в виду уничтожить все другие расписания в полночь, вам просто нужно запустить свои полночные расписания и убить других.

Извините за мой плохой английский, надеюсь, это поможет вам.

...