Spring Boot基于SQL Server的分布式锁失效问题排查与解决
SQL Server分布式锁延迟实例抢锁问题解决
场景
- 运行两个部署定时任务的Docker容器实例,需通过SQL Server实现分布式锁避免任务并发执行
- 已配置
DefaultLockRepository与JdbcLockRegistryBean,完成锁获取代码编写
问题现象
- 第一个实例启动后:成功获取锁,输出「Locked」日志,数据库生成对应锁记录
- 间隔30秒启动第二个实例:同样输出「Locked」日志,数据库锁记录被覆盖,分布式锁未生效
- 间隔5秒内启动第二个实例:锁功能正常,第二个实例无法获取锁
根因
DefaultLockRepository的默认TTL(锁生存时间)为10秒,第一个实例的锁在10秒后自动过期,导致30秒后启动的第二个实例能直接抢占锁。
解决方案
调整DefaultLockRepository的TTL参数为100秒(可根据任务实际执行时长灵活配置),确保锁在任务运行周期内保持有效,其他实例在TTL范围内无法获取该锁。
内容的提问来源于stack exchange,提问作者santal
相关产品推荐
相关产品推荐

