【问题标题】:Java Spring Scheduler LockJava Spring 调度程序锁
【发布时间】:2018-10-27 17:27:45
【问题描述】:

我曾经尝试向我的客户发送通知。我正在使用 kubernetes,并且我创建了多个 Spring Boot 应用程序,因为我有 2 个副本。这一切都很好,但是当调度程序运行时,他们每个人都可以发送通知。我看了一点石英,但配置似乎有点复杂。有没有简单的方法?

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

【问题讨论】:

标签: java spring quartz-scheduler scheduler


【解决方案1】:

您还可以使用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 了解如何使用它。

【讨论】:

  • 这就像一个魅力。非常感谢 POD_NAME 环境配置。我会浪费大量时间来弄清楚如何传递 pod 名称。
猜你喜欢
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
相关资源
最近更新 更多