Shedlock 和临时停止任务?

Shedlock and temporary stop task(s)?

当运行多个服务器上的多个计划任务时,Shedlock 似乎很不错,但有时,我们也需要短时间或长时间暂停一些任务。 当然,可以用额外的 properties/flags 来控制每个任务,但我的建议是为此也使用 Shedlock,并为我们希望停止的任务引入逻辑“node/server”,并更新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 因为它通常被库忽略。最好设置它以防万一其他人想知道为什么任务没有被执行。