في الآونة الأخيرة ، واجهت موقفًا لا تتراجع فيه المعاملة. فكرت أيضًا في قول أن هناك أخطاء في معاملات JPA؟ أنا أفكر كثيرا ...
من أجل طباعة السجلات بوضوح ، أقوم بإضافة Tyrcatch لطباعة السجلات في الصيد. لكن الوضع هنا يأتي. عندما تكون هذه الطريقة غير طبيعية ، يتم طباعة السجل ، ولكن لا يتم التراجع عن المعاملة المضافة.
مثال:
مثل هذه الأساليب لن تراجع (إحدى أخطاء الطريقة ، لن تراجع الطريقة الأخرى):
if (usersave) {try {userDao.save (user) ؛ UserCapabilityQuotadao.save (capilityQuota) ؛ } catch (استثناء e) {logger.info ("القدرة على فتح الواجهة ، استثناء فتح الحساب ، معلومات الاستثناء:"+e) ؛ }}الطريقة التالية تتراجع (إحدى أخطاء الطريقة ، ستتراجع الطريقة الأخرى):
if (usersave) {try {userDao.save (user) ؛ UserCapabilityQuotadao.save (capilityQuota) ؛ } catch (استثناء e) {logger.info ("القدرة على فتح الواجهة ، استثناء فتح الحساب ، معلومات الاستثناء:"+e) ؛ رمي new RunTimeException () ؛ }}أو:
if (usersave) {try {userDao.save (user) ؛ UserCapabilityQuotadao.save (capilityQuota) ؛ } catch (استثناء e) {logger.info ("القدرة على فتح الواجهة ، استثناء فتح الحساب ، معلومات الاستثناء:"+e) ؛ TransactionAspectSupport.currentTransactionStatus (). setRollbackOnly () ؛ }}لماذا لا يمكنك الخروج؟ ؟ إنه لا يفهم آلية المعاملة في الربيع. ! !
***** يتم التراجع عن معاملة الربيع الافتراضية فقط عند حدوث RuntimeexCetPion غير المقتنيات. *******
مبدأ SPRINGAOP استثناء التقاط: تحتاج الطريقة المقابلة إلى إلقاء استثناء بشكل صريح ولا يمكن معالجتها بأي شكل من الأشكال. وبهذه الطريقة ، يمكن لوكيل AOP التقاط استثناء الطريقة وتراجع. بشكل افتراضي ، فإن AOP يمسك فقط باستثناء RunTimeException ، ولكن يمكن أن يمر.
تكوين لالتقاط استثناءات محددة وتراجع
بمعنى آخر ، لا تستخدم trycatch في طريقة الخدمة أو إضافة thrownewruntimeexcetpion () إلى الصيد ، بحيث يمكن اكتشاف البرنامج من قبل AOP وإعادة التراجع عندما يكون البرنامج استثنائيًا.
حل:
الحل 1. على سبيل المثال ، إذا كانت طبقة الخدمة تتعامل مع معاملات ، فإن الطريقة في الخدمة لا تؤدي التقاط الاستثناء ، أو تضيف عبارة تلقائية () عبارة عن بيان إلى بيان catch ، بحيث يتم استمرار AOP للاستثناء ثم تراجع ، ودقة الطبقة العليا (عميل WebService ، عمل طبقة العرض) للقبض على الاستثناء والتعامل معه.
الحل 2. إضافة: TransactionAspectSupport.CurrentTransActionStatus (). setRollbackOnly () ؛ بيان لبيان الصيد لطريقة طبقة الخدمة ، التراجع يدويًا ، بحيث لا تحتاج الطبقة العليا إلى التعامل مع الاستثناءات (ممارسة المشروع الحالية)
لخص
ما سبق هو كل محتوى هذه المقالة حول تحليل مثيلات التراجع عن معاملة الربيع. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!