Весенний планировщик с блокировкой остановит запуск следующих вызовов через некоторое время

#java #spring-boot #scheduled-tasks #spring-scheduled

Вопрос:

У меня есть ниже фрагмент кода для запуска синхронизации на заданной частоте, текущая частота составляла 1 час.

 @SchedulerLock(name = "userSync", lockAtMostFor = 180_000L)
@Scheduled(cron = "${user.sync.cron.expression}")
public void scheduledSync() {
    logger.info("starting user sync...")
    performSync();
    logger.info("user sync completed!")
}
 

Этот фрагмент кода работал нормально в течение многих дней. Внезапно синхронизация застряла после запуска (напечатан только регистратор запуска синхронизации) и больше не выполняла последующие вызовы.

Как исправить планировщик, чтобы он работал, если одна попытка не удалась?

Комментарии:

1. Что делает функция performSync ()?

2. @SimonMartinelli вызывает LDAP, извлекает пользовательские данные и обновляет их в базе данных.

3. Потому что, если вы скажете, что «запуск синхронизации пользователей» напечатан, то он должен застрять в этом mehtod

4. @SimonMartinelli да, это так. мой вопрос в том, как оправиться от такого сценария?

5. Это зависит от того, что делает этот метод и где в этом методе он застрял