编程语言
首页 > 编程语言> > Java Spring Scheduler锁定

Java Spring Scheduler锁定

作者:互联网

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

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

解决方法:

您还可以使用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.

标签:scheduler,quartz-scheduler,spring,java
来源: https://codeday.me/bug/20191108/2008135.html