package com.yunfeiyun.agmp.common.annotation;

import com.yunfeiyun.agmp.common.constant.ErrorCode;
import com.yunfeiyun.agmp.common.enums.RedisLockKey;
import lombok.NonNull;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface RedisLock {
    /** redis锁的key */
    @NonNull RedisLockKey key();

    /** redis对应key保存的值 */
    public String value() default "";

    /** 锁过期时间（单位：毫秒） */
    public long expireTime() default 30000;

    /** 尝试获取锁的超时时间（单位：毫秒） */
    public long acquireTime() default 5000;

    /** 每次尝试获取锁的间隔时间（单位：毫秒） */
    public long sleepTime() default 100;

    /** 是否在获取锁失败后立即退出尝试 */
    public boolean stopWhenFail() default false;

    public ErrorCode errorCode() default ErrorCode.SYSTEM_ERROR;


}
