في إدارة معاملات Boot Spring ، قم بتنفيذ PlatformTransactionManager ذاتي الواجهة.
الواجهة العامة platformTransActionManager {org.springframework.transaction.transactionStatus getTransaction (org.springframework.transaction.transactionDefinition TransactionDefinition) يلقي org.springframework.transaction.transactation ؛ void الالتزام (org.springframework.transaction.transactionStatus TransactionStatus) يلقي org.springframework.transaction.transactionexception ؛ التراجع الفراغ (org.springframework.transaction.transactionStatus TransactionStatus) يلقي org.springframework.transaction.transactionexception ؛}عندما نستخدم تبعية Spring-Boot-Starter-JDBC ، سيقوم الإطار تلقائيًا بضخ DataSourCetransActionManager بشكل افتراضي. لذلك لا نحتاج إلى أي تكوين إضافي لاستخدام التعليق التوضيحي transactional لاستخدام المعاملات.
مدير المعاملات JDBC
في الخدمة ، ستدعم الطريقة المشروحة من قبل TransActional المعاملات. إذا كان التعليق التوضيحي في الفصل ، فإن جميع أساليب المعاملات الدعم للفئة بأكملها بشكل افتراضي.
وضع مدير متعدد النقل
1: يمكنك تنفيذ واجهة TransactionManagementConmentation ، وقيمة إرجاع الطريقة الموجودة بداخلها هي مدير المعاملات الافتراضي.
2: يمكنك تعيين القيمة على طريقة التنفيذ المحددة
إذا كان هناك العديد من مثيلات PlatformTransActionManager في حاوية الربيع ولم يتم تنفيذ المعاملة الواجهة ContactionConfagnerFigurer لتحديد القيمة الافتراضية ، عندما نستخدم التعليقات التوضيحية transactional على الطريقة ، يجب علينا تحديدها ذات القيمة. إذا لم يتم تحديد ذلك ، فسيتم طرح استثناء.
//@enableTransActionManagement // قم بتشغيل إدارة معاملات التعليقات التوضيحية ، وهو ما يعادل <tx: تعليقات التعليق />@springbootapplicationpublicpublic pirectileMplication يطلق TransactionManagementConager2 // إنشاء مدير معاملات يدويًا 1 سيتم حقن إطار عمل بيانات البيانات تلقائيًا // في حاوية الربيع ، وسيتم تحميل التعليق يدويًا على bean أولاً ، ولن يعيد إطار عمل فئات تنفيذ PlatformTransActionManager الأخرى. bean (name = "txmanager1") platformTransActionManager TxManager (DataSource DataSource) {إرجاع DataSourCetransActionManager (DataSource) ؛ }. }. } public static void main (string [] args) {springapplication.run (fireiledemoapplication.class ، args) ؛ }}تنفيذ محدد
ComponentPublic Class DevSendMessage تنفذ sendMessage {// استخدم القيمة لتحديد أي مدير المعاملات لاستخدام @transactional (value = "txmanager1") @Override public void send () send2 () ؛ } transactional public void send2 () {system.out.println (">>>>>>>>>>> dev send2 () <<<<<<<") ؛ }}مستوى العزلة
عزل التعداد العام {default (TransactionDefinition.isolation_default) ، read_uncommitted (TransactionDefinition.isolation_read_uncommitt) ، read_committ (TransactionDefinition.Isolation_Read_Committ) ، trepable_read (المعالجة. قابل للتسلسل (TransactionDefinition.isolation_serializable) ؛ قيمة int النهائية الخاصة ؛ العزلة (القيمة int) {this.value = value ؛ } public int value () {return this.value ؛ }} حدد الطريقة: تعيين باستخدام خاصية العزل ، على سبيل المثال:
transactional (العزلة = العزلة.
سلوك التواصل
يشير ما يسمى سلوك انتشار المعاملات إلى أنه إذا كان سياق المعاملة موجودًا بالفعل قبل بدء المعاملة الحالية ، فهناك العديد من الخيارات التي يمكنها تحديد سلوك تنفيذ طريقة المعاملات.
يمكننا أن نرى أن org.springframework.transaction.annotation.
انتشار التعداد العام {مطلوب (TransactionDefinition.propagation_required) ، يدعم (TransactionDefinition.propagation_supports) ، إلزامي (المعاملة definition.propagation_mandatory) ، يتطلب (المعاملة Definition.propagation_requires_new) ، not_supported (TransactionDefinition.propagation_not_supported) ، لا (TransactionDefinition.propagation_never) ، متداخلة (TransactionDefinition.propagation_nested) ؛ قيمة int النهائية الخاصة ؛ الانتشار (قيمة int) {this.value = value ؛ } public int value () {return this.value ؛ }}مطلوب: إذا كانت المعاملة موجودة حاليًا ، انضم إلى المعاملة ؛ إذا لم تكن هناك معاملة حاليًا ، فقم بإنشاء معاملة جديدة. القيمة الافتراضية.
الدعم: إذا كانت المعاملة موجودة حاليًا ، انضم إلى المعاملة ؛ إذا لم يكن هناك معاملة حاليًا ، فاستمر في التشغيل بطريقة غير محطمة.
إلزامي: إذا كانت المعاملة موجودة حاليًا ، انضم إلى المعاملة ؛ إذا لم يكن هناك معاملة حاليًا ، يتم طرح استثناء. (أجبر على وضعه في المعاملة)
يتطلب _new: إنشاء معاملة جديدة ، وإذا كانت المعاملة موجودة حاليًا ، فسيتم تعليق المعاملة الحالية. (غالبًا ما يتم استخدام سجلات الطباعة. حتى إذا تم التراجع عن التراجع السابق ، سيتم تنفيذ المعاملة وسيتم تسجيل رسالة الخطأ)
not_supported: يدير بطريقة غير محطمة. في حالة وجود صفقة حاليًا ، سيتم تعليق المعاملة الحالية.
أبدا: تعمل بطريقة غير محطمة ، يلقي استثناء إذا كانت المعاملة موجودة حاليًا.
متداخل: في حالة وجود معاملة حاليًا ، يتم إنشاء معاملة لتشغيلها كمعاملة متداخلة للمعاملة الحالية ؛ إذا لم يكن هناك معاملة حاليًا ، فإن القيمة تعادل المطلوبة.
حدد الطريقة: تعيين باستخدام خاصية الانتشار ، على سبيل المثال:
transactional (الانتشار = الانتشار.
المعاملة وليس وضع التراجع
لا تراجع إلا في حالة حدوث RunTimeException غير الملتزم
سيكون الاستثناء الذي تم إلقاؤه بواسطة Catch ناجحًا عندما يكون كلا الإدراجين
OverRideTransActional public void insertandInsert (موظفي الموظفين) {staftDao.insert (staff) ؛ حاول {int i = 1/0 ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } staffdao.insert (staff) ؛ }تمت إضافة إلى بيان الصيد لطبقة الخدمة: المعاملات pecuteSupport.CurrentTransactionStatus (). setRollbackOnly () ؛ بيان ، لن يدخل التراجع اليدوي البيانات
OverRideTransActional public void insertandInsert (موظفي الموظفين) يلقي الاستثناء {try {staffdao.insert (staff) ؛ int i = 1/0 ؛ staffdao.insert (الموظفين) ؛ } catch (استثناء e) {TransactionAspectSupport.currentTransActionStatus (). setRollbackOnly () ؛ }}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.