Java Spring Scheduler锁定

时间:2018-10-27 17:27:46

标签: java spring quartz-scheduler scheduler

我一直试图将通知发送给我的客户一次。我正在使用kubernetes,并且创建了多个spring boot应用程序,因为我有2个副本。一切都很好,但是当调度程序运行时,每个调度程序都可以发送通知。我对石英有些了解,但配置似乎有些复杂。有没有简便的方法?

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

1 个答案:

答案 0 :(得分:3)

您还可以使用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作为环境变量。 dlock会自动处理它。

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

有关使用的信息,请参见article