Блокировка Java Spring Scheduler - PullRequest
       6

Блокировка Java Spring Scheduler

0 голосов
/ 27 октября 2018

Я пытался отправить уведомления своим клиентам один раз.Я использую kubernetes и создаю несколько приложений с весенней загрузкой, потому что у меня есть 2 реплики.Это все нормально, но когда запускается планировщик, каждый из них может отправлять уведомления.Я немного посмотрел на кварц, но конфигурация кажется немного сложной.Есть ли простой способ сделать это?

@Scheduled(fixedDelayString = "300000")
public void sendFlowerNotification() {
  //Code
}

1 Ответ

0 голосов
/ 27 октября 2018

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

@Scheduled(fixedDelayString = "300000")
@TryLock(name = "flowerNotification", owner = POD_NAME, lockFor = THREE_MINUTES)
public void sendFlowerNotifications() {
  List<Notification> notifications = notificationService.getNotifications();
  for(Notification notification: notifications){
    sendNotification(notification);
  }
}

Вы можете отправить POD_NAME в spring как переменную окружения.Длок автоматически с этим справится.

 env:
 - name: POD_NAME
   valueFrom:
     fieldRef:
       fieldPath: metadata.name

См. статью об ее использовании.

...