来源:互联网 更新时间:2026-08-07 07:27
本文章代码: gitee , gitcode , github
![[057][调度模块]分布式环境下定时任务的防重复执行方案](http://www.haoling.cc/uploadfile/2026/0807/25c8ffc529148f2faaa58e35acd2c816.webp)
在集群部署场景里,同一份定时任务很容易被多台机器同时拉起执行,轻则白白消耗资源,重则直接引发数据错乱。本文将围绕提供的 AutoRenewalLockTaskRunner 和 FixedLeaseLockTaskRunner 系列接口展开,说明怎样用 Redis/Redisson 分布式锁把任务执行过程包起来,从而保证任一时刻只会有一个节点真正执行任务。
框架定义了多个锁装饰器接口,业务实现只需继承相应接口并实现 doRun():
// Redis 自动续期锁public interface AutoRenewalLockTaskRunner extends TaskRunner, Lockable { @Overridedefault void run(Map params) { RedisLockService.instance.autoRenewal().doInLock(key(), () -> doRun(params));}void doRun(Map params);// key() 定义锁的标识,如 "task:order:sync"} 类似地,还提供了:
FixedLeaseLockTaskRunner(Redis 固定租期) AutoRenewalBlockLockTaskRunner(Redisson 阻塞 自动续期) FixedLeaseReentrantLockTaskRunner(Redisson 可重入 固定租期) | 模式 | 适用场景 | Redis 实现 | Redisson 实现 |
|---|---|---|---|
| 固定租期 | 任务执行时间稳定且较短 | SET NX PX 不续期 | lock(leaseTime) |
| 自动续期 | 任务执行时间不确定或较长 | 定时任务每 5s 续期 | lock()(看门狗机制) |
Lockable 接口要求实现类提供 key() 方法,通常按任务名称或业务 ID 区分:
@Overridepublic String key() { return "schedule:lock:" getTaskName(); // 例如通过构造函数注入} LockCreateException,任务直接跳过,不会影响下次调度。 可覆盖 handleException(LockException) 方法自定义失败处理(如记录日志、发送告警)。 所有节点使用相同的锁 key,第一个获得锁的节点执行,其他节点快速失败,保证任务在集群内单点运行。
腾讯ima怎么把微信内容一键导入知识库?
黄金价格不断创新高!黄金稳定币XAU、PAXG市值达11亿美元
CC币价格预测(2026-2035):Canton币今日价格走势+长期价格预测
新浪互联网热点小时报丨2026年07月26日16时_今日实时互联网热点速递
2026鸣潮账号交易安全指南:五大交易平台对比与风险避坑分析
腾讯ima怎么创建共享知识库?
新浪机器学习热点小时报丨2026年07月25日18时_今日实时机器学习热点速递
今日比特币暴涨分析:Metaplanet的比特币BTC投资推动股价上涨17%
新浪人工智能热点小时报丨2026年07月30日18时_今日实时人工智能热点速递
蚂蚁庄园今日答案7月21日(今日已更新) 蚂蚁庄园今天正确答案是什么呢
2026年三角洲行动账号交易指南:5大交易平台对比与安全选购建议
比特币(BTC)核心周期指标复刻历史走势 价格或跌破5.8万美元关键支撑位
Celestia价格预测2026-2032:TIA币能否引领山寨币上涨行情?历史价格回顾
抖音怎么取消申请退货退款?抖音上取消退货怎么操作
腾讯ima知识库怎么分类管理?
短剧《史上最强洪荒修为》剧情介绍
Windy卫星云图怎么看?云层变化识别技巧
结婚家电首选:Leader懒人三筒Ultra热泵洗烘一体
kimi提示词专家使用方法新手指南
网络热词我黑切呢是什么意思
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc