التحكم في إعدادات المعاملات الداخلية من المعاملة الخارجية مع الربيع 2.5

StackOverflow https://stackoverflow.com/questions/3843205

سؤال

أنا أستخدم إدارة المعاملات الربيع 2.5 ولدي الإعداد التالي:

Bean1

@Transactional(noRollbackFor = { Exception.class })
public void execute() {
  try {
    bean2.execute();
  } catch (Exception e) {
    // persist failure in database (so the transaction shouldn't fail)
    // the exception is not re-thrown
  }
}

Bean2

@Transactional
public void execute() {
  // do something which throws a RuntimeException
}

لا يستمر الفشل أبدًا في DB من Bean1 لأن المعاملة بأكملها تراجعت.

لا أريد أن أضيف Norollbackfor في Bean2 لأنه يستخدم في الكثير من الأماكن التي لا تملك منطقًا للتعامل مع استثناءات وقت التشغيل بشكل صحيح.

هل هناك طريقة لتجنب معاملتي مرة أخرى فقط عندما يتم استدعاء Bean2.execute () من Bean1؟

خلاف ذلك ، أعتقد أن أفضل خيار لي هو استمرار فشلي ضمن معاملة جديدة؟ أي شيء آخر نظيف يمكنني فعله؟

هل كانت مفيدة؟

المحلول

هذا هو واحد من تحذيرات التعليقات التوضيحية ... صفك لا يمكن إعادة استخدامه!

إذا قمت بتكوين المعاملات الخاصة بك في XML ، إذا كان ذلك ممكنًا.

على افتراض أنك تستخدم تكوين XML: إذا لم تستهلك موارد باهظة الثمن ، فيمكنك إنشاء مثيل آخر من Bean2 لاستخدام الرمز الذي حددته. أي أنه يمكنك تكوين واحد كما حددت أعلاه ، وواحد بدون لفة للاستثناء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top