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