最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java并發(fā)訪問重復請求過濾問題

 更新時間:2018年05月26日 15:03:21   作者:u010704600  
本篇文章給大家分享了關于java并發(fā)訪問重復請求過濾的相關問題以及解決方法,對此有需要的朋友參考學習下。

問題描述

前段時間遇到個問題,自己內部系統(tǒng)調用出現重復請求導致數據混亂。

發(fā)生條件:接受到一個請求,該請求沒有執(zhí)行完成又接受到相同請求,導致數據錯誤(如果是前一個請求執(zhí)行完成,馬上又接受相同請求不會有問題)

問題分析:是由于數據庫的臟讀導致

問題解決思路

1.加一把大大的鎖 (是最簡單的實現方式,但是性能堪憂,而且會阻塞請求)

2.實現請求攔截 (可以共用,但是怎么去實現卻是一個問題,怎么用一個優(yōu)雅的方式實現,并且方便復用)

3.修改實現 (會對原有代碼做改動,存在風險,最主要的是不能共用)

最終實現方式

通過注解+spring AOP 的方式實現

使用

通過在任意方法上添加注解NotDuplicate

類1:

import static java.lang.annotation.ElementType.METHOD;

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

@Target({METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface NotDuplicate {
}

類2:

import java.lang.reflect.Method;
import java.util.Set;
import java.util.concurrent.ConcurrentSkipListSet;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;



@Aspect
@Component
public class NotDuplicateAop {

  private static final Set<String> KEY = new ConcurrentSkipListSet<>();

  @Pointcut("@annotation(com.hhly.skeleton.base.filter.NotDuplicate)")
  public void duplicate() {
  }

  /**
   * 對方法攔截后進行參數驗證
   * @param pjp
   * @return
   * @throws Throwable
   */
  @Around("duplicate()")
  public Object duplicate(ProceedingJoinPoint pjp) throws Throwable {
    MethodSignature msig = (MethodSignature) pjp.getSignature();
    Method currentMethod = pjp.getTarget().getClass().getMethod(msig.getName(), msig.getParameterTypes());
    //拼接簽名
    StringBuilder sb = new StringBuilder(currentMethod.toString());
    Object[] args = pjp.getArgs();
    for (Object object : args) {
      if(object != null){
        sb.append(object.getClass().toString());
        sb.append(object.toString());
      }
    }
    String sign = sb.toString();
    boolean success = KEY.add(sign);
    if(!success){
      throw new ServiceRuntimeException("該方法正在執(zhí)行,不能重復請求");
    }
    try {
      return pjp.proceed();
    } finally {
      KEY.remove(sign);
    }

  }
}

以上就是本次給大家講述的全部內容以及相關代碼,如果大家還有任何問題可以在下方的留言區(qū)討論,感謝大家對腳本之家的支持。

相關文章

  • Java中的數組排序方式(快速排序、冒泡排序、選擇排序)

    Java中的數組排序方式(快速排序、冒泡排序、選擇排序)

    這篇文章主要介紹了Java中的數組排序方式(快速排序、冒泡排序、選擇排序),需要的朋友可以參考下
    2014-02-02
  • 如何查找YUM安裝的JAVA_HOME環(huán)境變量詳解

    如何查找YUM安裝的JAVA_HOME環(huán)境變量詳解

    這篇文章主要給大家介紹了關于如何查找YUM安裝的JAVA_HOME環(huán)境變量的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-10-10
  • java實現Composite組合模式的實例代碼

    java實現Composite組合模式的實例代碼

    這篇文章主要介紹了java實現Composite組合模式,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • java局域網聊天小程序

    java局域網聊天小程序

    這篇文章主要為大家詳細介紹了java局域網聊天小程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Java實現動態(tài)代理

    Java實現動態(tài)代理

    本文給大家介紹的是java使用動態(tài)代理類實現動態(tài)代理的方法和示例,這里推薦給大家,有需要的小伙伴參考下吧
    2015-02-02
  • SpringBoot 對象存儲 MinIO的詳細過程

    SpringBoot 對象存儲 MinIO的詳細過程

    MinIO 是一個基于 Go 實現的高性能、兼容 S3 協(xié)議的對象存儲,它適合存儲海量的非結構化的數據,這篇文章主要介紹了SpringBoot 對象存儲 MinIO,需要的朋友可以參考下
    2023-07-07
  • 基于MyBatis的數據持久化框架的使用詳解

    基于MyBatis的數據持久化框架的使用詳解

    Mybatis是一個優(yōu)秀的開源、輕量級持久層框架,它對JDBC操作數據庫的過程進行封裝。本文將為大家講解一下基于MyBatis的數據持久化框架的使用,感興趣的可以了解一下
    2022-08-08
  • 簡單了解springboot加載配置文件順序

    簡單了解springboot加載配置文件順序

    這篇文章主要介紹了簡單了解springboot加載配置文件順序,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • java對接支付寶支付接口開發(fā)詳細步驟

    java對接支付寶支付接口開發(fā)詳細步驟

    本文主要介紹了java對接支付寶支付接口開發(fā)詳細步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • springcloud干貨之服務注冊與發(fā)現(Eureka)

    springcloud干貨之服務注冊與發(fā)現(Eureka)

    這篇文章主要介紹了springcloud干貨之服務注冊與發(fā)現(Eureka) ,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01

最新評論

吐鲁番市| 高平市| 铅山县| 宕昌县| 庆阳市| 镇康县| 惠东县| 齐河县| 通化县| 苗栗县| 湖南省| 宁海县| 宜兰市| 营山县| 郯城县| 阿荣旗| 布拖县| 农安县| 年辖:市辖区| 鄂尔多斯市| 平顺县| 阳西县| 启东市| 禄丰县| 铁岭县| 亚东县| 怀柔区| 德兴市| 板桥市| 龙岩市| 青铜峡市| 渑池县| 瓮安县| 长宁区| 商水县| 芒康县| 民乐县| 郸城县| 岳阳县| 水富县| 托里县|