为了账号安全,请及时绑定邮箱和手机立即绑定

Java Spring 调度程序锁

Java Spring 调度程序锁

繁华开满天机 2021-12-10 16:34:06
我一直在尝试向我的客户发送通知。我正在使用 kubernetes 并且我创建了多个 Spring Boot 应用程序,因为我有 2 个副本。这一切都很好,但是当调度程序运行时,他们每个人都可以发送通知。我看过一点点石英,但配置似乎有点复杂。有没有简单的方法来做到这一点?@Scheduled(fixedDelayString = "300000")public void sendFlowerNotification() {  //Code}
查看完整描述

1 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

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

请参阅有关使用它的文章。


查看完整回答
反对 回复 2021-12-10
  • 1 回答
  • 0 关注
  • 150 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信