SpringBoot 自定义注解+AOP+Redis 实现分布式锁做幂等
-
-
- 1、DistributedLockApi.java(API分布式锁注解)
- 2、DistributedLockTask.java(任务分布式锁注解)
- DistributedLockAspect.java(分布式锁切面)
- 1、TaskService.java(测试任务类)
- 2、Main.java(测试执行任务类)
- 3、ApiController.java(测试ApiController类)
-
GitHub:link. 欢迎star
注意:本篇博客风格(不多比比就是撸代码!!!)
一、maven依赖
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- aop -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
二、自定义注解类
1、DistributedLockApi.java(API分布式锁注解)
import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;
/**
* @author Andon
* 2021/12/21
* <p>
* 分布式锁注解(API)
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DistributedLockApi {
/**
* 锁key前缀
*/
String key() default "lock_api";
/**
* 锁value
*/
String value() default "lock_value";
/**
* 锁超时时间
*/
long timeout() default 10;
/**
* 超时时间单位
*/
TimeUnit timeUnit() default TimeUnit.MINUTES;
/**
* 被加锁方法执行完是否立即释放锁
*/
boolean immediatelyUnLock() default true;
/**
* 等待获取锁时间(秒)
*/
long waitLockSecondTime() default 0;
}
2、DistributedLockTask.java(任务分布式锁注解)
import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;
/**
* @author Andon
* 2021/12/21
* <p>
* 分布式锁注解(任务)
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DistributedLockTask {
/**
* 锁key前缀
*/
String key() default "lock_task";
/**
* 锁value
*