1

我有一个部署在多个实例中的 Spring Boot 服务。我想在其中一个实例中拥有一个连续运行的“守护线程”。如果该实例关闭,线程最终应该(在超时后)在其他实例上变为活动状态。

该服务使用一个通用的 MongoDB 数据库,它原则上可以提供锁定,但我正在寻找能够正确执行此操作的模式或库。

我查看了Shedlock,但它似乎仅适用于持续时间可预测的短期作业,而不是长时间运行的守护线程。

4

2 回答 2

1

我目前正在研究允许扩展活动锁的LockExtender 。它对您的用例有帮助吗?用法是

LockExtender.extendActiveLock(Duration.of(5, MINUTES), ZERO);
于 2021-07-11T17:34:22.453 回答
1

我们使用 Shedlock,我强烈推荐它,因为它很简单。您说您想要一个长时间运行的守护程序线程 - 但您是否可以改为使用 @Scheduled(fixedDelay=0) 注释方法,该方法将运行,然后在上一次迭代完成后再次触发以由 Spring 运行?您可以将其用作您的“while”循环,而不是使用内部具有永无止境的 while 循环的单个方法。

于 2021-07-10T02:26:22.910 回答