問題の説明
私はしばらく前に問題に遭遇しましたが、内部システムコールでリクエストを繰り返したとき、データは混乱していました。
発生条件:リクエストを受け入れ、リクエストが完了せず、同じリクエストが受け入れられ、データエラーが発生しました(前のリクエストが完了した場合、すぐに同じリクエストを受け入れるのに問題はありません)
問題の分析:データベースの汚い読み取りが原因
問題解決のアイデア
1.大きなロックを追加します(それを実装する最も簡単な方法ですが、パフォーマンスは心配しているため、リクエストをブロックします)
2。リクエストインターセプトを実装します(共有できますが、それを実装する方法は問題です。エレガントな方法で実装し、再利用を促進する方法)
3.変更と実装(元のコードに変更が加えられますが、これは危険です。最も重要なことは、共有できないことです)
最終実装方法
注釈 +スプリングAOPによって実装されています
使用
どんなメソッドでも不足していません
クラス1:
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)@documentedpublic @interface notduplicate {}カテゴリー2:
Import java.lang.Reflect.Method; Import java.util.set; Import java.util.concurrent.concurrentskiplistest; Import org.aspectj.lang.proceedjoinpoint; Import org.aspectj.lang.annotation.Around; Import org.lang.lang.annotation.aspection.Annotation.Annotation.Annotation.Annotation.Annotation org.aspectj.lang.annotation.pointcut; import org.aspectj.lang.reflt.methodsignature; import org.springframework.stereotype.component;@aspey@componentpublic class notduplicateaop {private static final set <string> key = new concurrentskipristet <>); @pointcut( " @annotation(com.hhly.skeleton.base.filter.notduplicate)")public void duplicate(){} / ** *パラメーター検証Methodsignature msig =(methodignature)pjp.getSignature();メソッドcurrentMethod = pjp.getTarget()。getClass()。getMethod(msig.getName()、msig.getParametertypes()); // signature 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){新しいserviceruntimeexception( "この方法が実行されており、繰り返されない"); } try {return pjp.proceed(); }最後に{key.remove(sign); }}}上記は、今回私があなたに言ったすべてのコンテンツと関連コードです。ご質問がある場合は、以下のコメント領域で説明できます。 wulin.comへのご支援ありがとうございます。