You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确清理Spring管理的ShedLock表中的记录?

ShedLock 记录清理的正确方式
  • 启用自动过期清理(推荐)
    ShedLock本身支持自动清理过期锁记录,无需手动执行TRUNCATE。在Spring Boot配置中添加以下参数即可:

    # 每10分钟执行一次过期记录清理
    shedlock.cleanup.interval=PT10M
    # 锁的最大持有时长,超过该时间的记录会被判定为过期
    shedlock.lock-at-most-for=PT5M
    

    其中PT10M是ISO-8601时间格式,代表10分钟,可根据业务需求调整时长。开启后,ShedLock会自动维护表内记录,不会出现清理后需重启应用的问题。

  • 手动触发清理API
    如果需要主动清理而非等待定时任务,可以注入LockProvider实例,调用其自带的cleanUp()方法。示例代码:

    @Autowired
    private LockProvider lockProvider;
    
    public void cleanExpiredShedLocks() {
        if (lockProvider instanceof JdbcTemplateLockProvider) {
            ((JdbcTemplateLockProvider) lockProvider).cleanUp();
        }
    }
    

    这个方法只会删除已过期的锁记录,不会影响当前有效的锁,执行后新的锁记录能正常插入,无需重启应用。

  • 为何TRUNCATE后需重启?
    直接用TRUNCATE清空表时,ShedLock内部的缓存或状态未同步更新,后续尝试获取锁时会误判锁仍存在,因此不会插入新记录。而使用自带清理方法时,会同时更新内部状态,避免该问题。

  • 注意事项

    • 禁止全量执行TRUNCATE或DELETE FROM shedlock,除非所有应用实例已停止,否则会导致分布式锁失效。
    • lock-at-most-for的配置需合理,既要避免死锁,又不能短于任务实际执行时长。

内容的提问来源于stack exchange,提问作者L.r. Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 21:04:53