SpringBoot 分布式锁 @klock 详解
SpringBoot 分布式锁 @klock 详解
📚简介
📖@Klock 可以标注四个参数,作用分别如下
name:lock 的 name,对应 redis 的 key 值。默认为:lock.包名.类名-方法名。 可根据业务指定 name, 规则为: lock.name-方法名。
lockType:锁的类型,目前支持(可重入锁,公平锁,读写锁)。默认为:公平锁
waitTime:获取锁最长等待时间。默认为:60s。同时也可通过 spring.klock.waitTime 统一配置
leaseTime:获得锁后,自动释放锁的时间。默认为:60s。同时也可通过 spring.klock.leaseTime 统一配置
lockTimeoutStrategy: 加锁超时的处理策略,可配置为不做处理、快速失败、阻塞等待的处理策略,默认策略为不做处理
customLockTimeoutStrategy: 自定义加锁超时的处理策略,需指定自定义处理的方法的方法名,并保持入参一致。
releaseTimeoutStrategy: 释放锁时,持有的锁已超时的处理策略,可配置为不做处理、快速失败的处理策略,默认策略为不做处理
customReleaseTimeoutStrategy: 自定义释放锁时,需指定自定义处理的方法的方法名,并保持入参一致。
🔖加锁超时处理策略(LockTimeoutStrategy):
NO_OPERATION 不做处理,继续执行业务逻辑
FAIL_FAST 快速失败,会抛出 KlockTimeoutException
KEEP_ACQUIRE 阻塞等待,一直阻塞,直到获得锁,但在太多的尝试后,会停止获取锁并报错,此时很有可能是发生了死锁。
自定义(customLockTimeoutStrategy) 需指定自定义处理的方法的方法名,并保持入参一致,指定自定义处理方法后,会覆盖上述三种策略,且会拦截业务逻辑的运行。
📒释放锁时超时处理策略(ReleaseTimeoutStrategy):
NO_OPERATION 不做处理,继续执行业务逻辑
FAIL_FAST 快速失败,会抛出 KlockTimeoutException
自定义(customReleaseTimeoutStrategy) 需指定自定义处理的方法的方法名,并保持入参一致,指定自定义处理方法后,会覆盖上述两种策略, 执行自定义处理方法时,业务逻辑已经执行完毕,会在方法返回前和 throw 异常前执行。
📜锁超时处理流程
自定义超时处理策略
🖊️最后总结
🖲要熟练掌握技巧,一定多多坚持练习:骐骥一跃,不能十步;驽马十驾,功在不舍。
版权声明: 本文为 InfoQ 作者【javaNice】的原创文章。
原文链接:【http://xie.infoq.cn/article/abc7a1834d43dd28e282ead45】。文章转载请联系作者。
评论