package com.qmth.boot.core.concurrent.annotation;

import com.qmth.boot.core.concurrent.model.LockType;

import java.lang.annotation.*;

/**
 * 自定义锁注解，方便在方法执行过程自动上锁
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD })
@Documented
public @interface Lockable {

    /**
     * 锁名称，不能为空
     *
     * @return
     */
    String name();

    /**
     * 锁标识，支持SPEL表达式，可以为空
     *
     * @return
     */
    String key() default "";

    /**
     * 锁类型，默认为写锁
     *
     * @return
     */
    LockType type() default LockType.WRITE;

    /**
     * 上锁超时秒数，默认-1强制阻塞，大于等于0则尝试失败后抛出异常
     *
     * @return
     */
    int timeout() default -1;

}
