Spring Shedlock 时序问题

use*_*158 5 java spring spring-boot shedlock

我们使用 Spring Shedlock 库在集群环境中一次运行一个任务实例。但看起来锁会一直保持到特定时间(由 lockAtMostFor 属性配置,如果我们不配置,它将从 spring 配置中获取默认值),而不是直到任务完成。

假设我配置了 lockAtMostFor=15 分钟,则 15 分钟内没有并行任务在任何节点上运行,但是 15 分钟后,如果任何节点有机会运行(或手动触发)任务,即使前一个任务没有运行,它也能够启动它完成其处理。

1. Shedlock 是基于时间的吗?

2.Documentation(https://github.com/lukas-krecan/ShedLock)说只有当任务完成时才会释放锁,并且lockAtMostFor属性仅在节点终止事件的情况下使用,但即使任务是,它也不会那样工作未完成其他节点可以运行任务,只有时间未到(lockAtMostFor 属性),其他节点才会被阻止运行任务

Luk*_*kas 1

引用自文档:

您必须设置lockAtMostFor一个比正常执行时间长得多的值。如果任务花费的时间超过lockAtMostFor所产生的行为可能是不可预测的(多个进程将有效地持有锁)。