一、定义分布式锁的名称为:StriveLock,注解使用方式如下:
@Override
@Async
@StriveLock(key = "#person.name", block = true)
public void printPersonForRedisLock(Person person) {
try {
Thread.sleep(10000);
log.info(JSONUtils.obj2Json(person));
} catch (Exception e) {
log.error("单元测试printPerson错误", e);
}
}
当有person.name 相同的名称同时访问这个方法时,只能一个一个的执行,等前面一个调用执行完成后才能再次执行相同person.name的方法调用。
二、代码实现
1、定义StriveLock注解
package com.fight.strive.sys.modules.lock.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 在方法上使用此注解,就处理Redis锁,
* key 是键
* &