Spring-Java Things Failured Failure Withing Concert مؤخرًا ، كنت أعمل في مشروع ووجدت بطريق الخطأ أن الفصل كان يرمي عمليات التراجع عن الأشياء ، وتم إدراج البيانات في قاعدة البيانات بشكل طبيعي ، لذلك قمت بالتحقق بعناية ونظرت إلى السبب المحدد.
لا يزال كل شيء يبدأ باستثناءات Java التي تم فحصها واستثناءات غير محسوبة.
إذن ما هو استثناء نوع التفتيش وما هو استثناء نوع عدم الفحص؟
هناك أبسط نقطتين للحكم:
1. الاستثناء غير المتميز الموروث من RunTimeException أو الخطأ ، في حين أن استثناء التحقق الموروث من الاستثناء (بالطبع ، يعد RunTimeException نفسه أيضًا فئة فرعية من الاستثناء).
2. يمكن اكتشاف الاستثناءات غير المحسوبة دون أن يتم القبض عليها ، في حين يجب معالجة الاستثناءات التي تم فحصها باستخدام Try ... Catch Block أو تسليمها على الاستثناء للطريقة المتفوقة للمعالجة. باختصار ، يجب كتابة الكود لمعالجته.
يظهر هيكل الاستثناء من Java في الشكل أدناه. من بينها ، يجب اكتشاف الاستثناءات التي ورثها مباشرة واستثناء استثناءات.
لننظر إلى الوراء في الكود الخاص بي:
1. يسبق اسم الطريقة
transactional
2. تهيئة الربيع ملف ApplicationContext-xxx.xml لديه أيضًا تكوينات ذات صلة للأشياء الربيع.
<bean id = "TransactionManager"> <property name = "dataSource" ref = "datasource"/> <property name = "RollbackOnCommitFailure" value = "true"
ولكن لماذا لا يتم التراجع عن الشيء الذي تم تقديمه بعد المحاولة ... استثناء استثناء الرمي عندما تسمى طريقة طبقة الخدمة؟
بعد التحقق من وثائق الربيع ذات الصلة ، وجدت أن إدارة المعاملات الإعلانية الأصلية في Spring أجرت تراجعات معاملة على الاستثناءات غير المحددة واستثناءات وقت التشغيل افتراضيًا ، في حين لا توجد تراجع في استثناءات محددة.
الاستثناء الذي تم إلقاؤه بالمحاولة ... تمسك في الرمز هو استثناء نوع الشيك. إطار الربيع لن يتراجع افتراضيًا.
في البرمجة ، يمكن تجنب الاستثناءات غير المحسوبة ، في حين يجب معالجة الاستثناءات التي تم فحصها باستخدام كتل بيان المحاولة أو تسليمها إلى الطريقة الفائقة للتعامل معها. باختصار ، يجب كتابة الكود لمعالجتها.
لذلك ، يجب أن يتم اكتشاف الاستثناء في الخدمة ثم رمي استثناء غير محدد يدويًا مرة أخرى حتى تصبح المعاملة سارية المفعول. على سبيل المثال:
جرب {...........} catch (استثناء e) {........... رمي businessException (e.getMessage ()) ؛ }بالطبع ، لدينا طريقة أسهل لحل هذه المشكلة ، أي تغيير طريقة التراجع الافتراضية عن طريق التعليق على المعلمات.
يتم تعريف Norollbackfor و Rollbackfor في التعليق التوضيحي transaction لتحديد ما إذا كان يتم إعادة استثناء معين.
استخدم الأمثلة:
transaction (norollbackfor = runtimeexception.class)
transaction (Rollbackfor = استثناء.
لذلك ، في السؤال أعلاه ، يمكنك إضافة معلمة التراجع مباشرة (Rollbackfor = استثناء.
الوحي:
هذا يتطلب منا أن نرث الاستثناء المخصص من RunTimeException عند تخصيص الاستثناء ، بحيث يتم التعامل معها بدقة من خلال معالجة المعاملات الافتراضية في الربيع.
لخص
ما سبق هو المحتوى الكامل لهذه المقالة حول مشكلة فشل معاملة Java. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!