Shedlock 和临时停止任务?

问题描述

当在多台服务器上运行多个计划任务时,Shedlock 看起来很棒,但有时,我们也需要短时间或长时间暂停一些任务。 当然,可以使用额外的属性/标志来控制每个任务,但我的建议是也使用 Shedlock,并为我们希望停止的任务引入一个逻辑“节点/服务器”,并更新 shedlock 中的行-table 与此节点的锁定,并设置一个lockedAt 时间在未来,一个lockUntil 到未来+ 1 秒(因此不会触发比maxRunning 更长的时间)。然后它会自动重新开始,或者如果需要我们可以进入并将时间移到更远的未来。

对 Shedlock 的这种用途有什么想法吗……聪明还是不好的做法?它仍然用于锁定,只是将作业锁定到逻辑假服务器。

解决方法

为此有可能(错误地)使用 ShedLock。您正在寻找的更新可能如下所示:

update shedlock set lock_until = :future,locked_at = now(),locked_by = "manual" where 
      name = :name and lock_until < now()

重要的部分是条件 lock_until < now(),它可以防止干扰正在运行的任务的现有锁。您不必设置 locked_by,因为它通常会被库忽略。最好设置它,以防其他人想知道为什么没有执行任务。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...