@Klock( name = "testKey", //key默认为lock.包名.类名-方法名;key.com.example.springmvc.klock.service.UserServiceImpl-test 如果配置了name则为lock.name-方法名;key.testKey-test
lockType= LockType.Fair,//锁为公平锁
waitTime = 10, //获取锁最长等待时间。10s
leaseTime = 300,//获得锁后,自动释放锁的时间300s
lockTimeoutStrategy = LockTimeoutStrategy.FAIL_FAST, //请求过来后获取锁超时的处理策略 这里配置的直接返回失败
releaseTimeoutStrategy = ReleaseTimeoutStrategy.FAIL_FAST)//超过300s后超时自动释放,锁处理策略 这里配置的直接返回失败,也可以配置不做处理
public void test(){
log.info("缓存");
}
name:lock的name,对应redis的key值。默认为:lock.包名.类名-方法名。 可根据业务指定name, 规则为: lock.name-方法名。
lockType:锁的类型,目前支持(可重入锁,公平锁,读写锁)。默认为:公平锁
waitTime:获取锁最长等待时间。默认为:60s。同时也可通过spring.klock.waitTime统一配置
leaseTime:获得锁后,自动释放锁的时间。默认为:60s。同时也可通过spring.klock.leaseTime统一配置
lockTimeoutStrategy: 加锁超时的处理策略,可配置为不做处理、快速失败、阻塞等待的处理策略,默认策略为不做处理
customLockTimeoutStrategy: 自定义加锁超时的处理策略,需指定自定义处理的方法的方法名,并保持入参一致。
releaseTimeoutStrategy: 释放锁时,持有的锁已超时的处理策略,可配置为不做处理、快速失败的处理策略,默认策略为不做处理
customReleaseTimeoutStrategy: 自定义释放锁时,需指定自定义处理的方法的方法名,并保持入参一致。
自定义超时处理策略
@Klock(name="test2Key", waitTime=2, customLockTimeoutStrategy = "customLockTimeout")
public void test2(String name, String age) {
try {
TimeUnit.SECONDS.sleep(3);
log.info("acquire lock");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private String customLockTimeout(String name, String age) {
log.info("customLockTimeout name: " + name + " age: " + age);
return "超时报错";
}
🖲要熟练掌握技巧,一定多多坚持练习:骐骥一跃,不能十步;驽马十驾,功在不舍。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。