我有一个部署在多个实例中的 Spring Boot 服务。我想在其中一个实例中拥有一个连续运行的“守护线程”。如果该实例关闭,线程最终应该(在超时后)在其他实例上变为活动状态。
该服务使用一个通用的 MongoDB 数据库,它原则上可以提供锁定,但我正在寻找能够正确执行此操作的模式或库。
我查看了Shedlock,但它似乎仅适用于持续时间可预测的短期作业,而不是长时间运行的守护线程。
我有一个部署在多个实例中的 Spring Boot 服务。我想在其中一个实例中拥有一个连续运行的“守护线程”。如果该实例关闭,线程最终应该(在超时后)在其他实例上变为活动状态。
该服务使用一个通用的 MongoDB 数据库,它原则上可以提供锁定,但我正在寻找能够正确执行此操作的模式或库。
我查看了Shedlock,但它似乎仅适用于持续时间可预测的短期作业,而不是长时间运行的守护线程。
我目前正在研究允许扩展活动锁的LockExtender 。它对您的用例有帮助吗?用法是
LockExtender.extendActiveLock(Duration.of(5, MINUTES), ZERO);
我们使用 Shedlock,我强烈推荐它,因为它很简单。您说您想要一个长时间运行的守护程序线程 - 但您是否可以改为使用 @Scheduled(fixedDelay=0) 注释方法,该方法将运行,然后在上一次迭代完成后再次触发以由 Spring 运行?您可以将其用作您的“while”循环,而不是使用内部具有永无止境的 while 循环的单个方法。