Problembeschreibung
Ich habe vor einiger Zeit auf ein Problem gestoßen, und die Daten waren verwirrend, als ich Anfragen in meinem internen Systemanruf wiederholt hatte.
Auftretensbedingungen: Ein Antrag angenommen, und die Anfrage wurde nicht abgeschlossen, und dieselbe Anfrage wurde angenommen, was zu einem Datenfehler führte (wenn die vorherige Anfrage abgeschlossen war, wird kein Problem mit derselben Anfrage sofort angenommen).
Problemanalyse : Sie wird durch schmutziges Lesen der Datenbank verursacht
Problemlösungsideen
1. Fügen Sie ein großes Schloss hinzu (es ist der einfachste Weg, es umzusetzen, aber die Leistung ist besorgniserregend und blockiert Anfragen).
2. Implementieren Sie Anforderungsabhörungen (kann gemeinsam genutzt werden, aber wie man es implementiert, ist ein Problem, wie man es auf elegante Weise implementiert und die Wiederverwendung erleichtert)
3.. Ändern und implementieren (Änderungen werden am ursprünglichen Code vorgenommen, was riskant ist, und das Wichtigste ist, dass er nicht geteilt werden kann)
Endgültige Implementierungsmethode
Implementiert durch Annotation +Spring AOP
verwenden
Notuplikat auf einer Methode
Klasse 1:
Import statischer java.lang.annotation.elementtype.method; import java.lang.annotation.documented; import Java.lang.annotation.Retention; java.lang.annotation.target; @target ({method})@retention(retentionPolicy.runtime)@documentedPublic @Interface notduplicate {}Kategorie 2:
Import Java.lang.reflect.Method; Import Java.util.set; Import Java.util.Concurrent.ConcurrentSkiplistset; Import org.aspespectj.Lang.Proceedingjoinpoint; org.aspespectj.lang.Annotation.pointcut; import org.aspespectj.lang.reflect.methodSignature; import org.springframework.stereotype.comPonent; @Pointcut (" @Annotation (com.hhly.skeletton.base.filter.notduplicate)") public void duplicate () {} / ** * Parameterüberprüfung nach der Methode Abschluss * @param pjp * @return * @throws throwable * / @Arows ("duplicate ()"). MethodIntature msIg = (methodeInt) pjp.getSignature (); Methode CurrentMethod = pjp.gettarget (). GetClass (). GetMethod (msig.getName (), msig.getParameterTypes ()); // Split Signature StringBuilder sb = new StringBuilder (currentMethod.toString ()); Object [] args = pjp.getargs (); für (Objektobjekt: args) {if (object! = null) {sb.append (Object.getClass (). toString ()); sb.Append (Object.ToString ()); }} String sign = sb.toString (); Boolean Success = Key.Add (Zeichen); if (! success) {werfen neuer serviceruntimeexception ("Diese Methode wird ausgeführt und kann nicht wiederholt werden"); } try {return pjp.procece (); } endlich {key.remove (Zeichen); }}}Das obige ist alle Inhalte und verwandten Codes, die ich Ihnen diesmal gesagt habe. Wenn Sie Fragen haben, können Sie sie im Kommentarbereich unten besprechen. Vielen Dank für Ihre Unterstützung für Wulin.com.