package com.elab.redis.annotation;

import java.lang.annotation.*;

/**
 * 防重复提交
 *
 * @author liukx
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface CacheLoopSubmit {

    /**
     * 缓存的key
     *
     * @return
     */
    String cacheName() default "";

    /**
     * 重复提交的标识key.
     * ALL如果是实体对象那么，对比所有属性。
     * 建议使用者重写实体的equals方法。
     * 如果是原始数据类型，包含String等等，则填写需要对比的对象下标 {0},{1}
     *
     * @return
     */
    String[] unionKey() default {};

    /**
     * 锁超时时间(ms)
     *
     * @return
     */
    long timeOut() default 5000;

    /**
     * 是否等待完成
     *
     * @return true 尝试抢锁,未抢到等待timeOut的超时时间，超过到则释放， false:没抢到锁直接跳过
     */
    boolean isWaitComplete() default false;

    /**
     * 错误提示
     *
     * @return
     */
    String errorMsg() default "系统认定为重复请求";

}
