وصف المشكلة
واجهت مشكلة منذ بعض الوقت ، وكانت البيانات مربكة عندما كنت قد تكررت الطلبات في مكالمة النظام الداخلي.
شروط الحدوث: تم قبول طلب ، ولم يتم إكمال الطلب وتم قبول نفس الطلب ، مما أدى إلى خطأ في البيانات (إذا تم الانتهاء من الطلب السابق ، فلن تكون هناك مشكلة في قبول نفس الطلب على الفور)
تحليل المشكلة : يحدث ذلك بسبب القراءة القذرة لقاعدة البيانات
أفكار حل المشكلات
1. أضف قفلًا كبيرًا (إنها أسهل طريقة لتنفيذها ، لكن الأداء يثير القلق وسيحظر الطلبات)
2. تنفيذ اعتراض الطلب (يمكن مشاركته ، ولكن كيفية تنفيذها مشكلة ، وكيفية تنفيذها بطريقة أنيقة وتسهيل إعادة الاستخدام)
3. تعديل وتنفيذ (سيتم إجراء تغييرات على الكود الأصلي ، وهو أمر محفوف بالمخاطر ، والشيء الأكثر أهمية هو أنه لا يمكن مشاركته)
طريقة التنفيذ النهائية
تنفذها التعليق التوضيحي +الربيع AOP
يستخدم
Notduplicate على أي طريقة
الفئة 1:
استيراد java.lang.annotation.elementtype.method ؛ import java.lang.annotation.documented ؛ import java.lang.annotation.retion ؛ import java.lang.annotation.renteplicy ؛ استيراد ؛ استيراد java.lang.annotation.target ؛@target ({method})@الاستبقاء (reaterentionpolicy.runtime)@documentedpublic interface notduplicate {}الفئة 2:
استيراد java.lang.reflect.method ؛ استيراد java.util.set ؛ استيراد java.util.concurrent.concurrentskiplistes org.aspectj.lang.annotation.pointcut ؛ import org.aspectj.lang.reflect.methodsignature ؛ استيراد org.springframework.stereotypee.component ؛@jounding@componentpublic class notduplicateap {private static final key = new concurrentskiplistes <> () ؛ @pointcut (" @incenotation (com.hhly.skealton.base.filter.notduplicate)") void public void duplicate () {} / ** * parameter التحقق بعد طريقة اعتراضها * prosegoing pjp * return * throws throw * / around (" msig = (MaysIngureature) pjp.getSignature () ؛ طريقة CurrentMethod = pjp.getTarget (). getClass (). getMethod (msig.getName () ، msig.getParameterTypes ()) ؛ // split signature stringBuilder sb = new StringBuilder (currentMethod.toString ()) ؛ Object [] args = pjp.getargs () ؛ لـ (كائن كائن: args) {if (object! = null) {sb.append (object.getClass (). toString ()) ؛ sb.append (object.toString ()) ؛ }} علامة سلسلة = sb.toString () ؛ نجاح منطقي = key.add (علامة) ؛ إذا (! النجاح) {رمي ServiceRuntImeexception ("يتم تنفيذ هذه الطريقة ولا يمكن تكرارها") ؛ } حاول {return pjp.proceed () ؛ } أخيرًا {key.remove (sign) ؛ }}}ما سبق هو كل المحتوى والرموز ذات الصلة التي أخبرتك بها هذه المرة. إذا كان لديك أي أسئلة ، فيمكنك مناقشتها في منطقة التعليق أدناه. شكرا لدعمكم ل wulin.com.