ในการจัดการธุรกรรมการบูตฤดูใบไม้ผลิใช้แพลตฟอร์มอินเทอร์เฟซด้วยตนเอง
อินเทอร์เฟซสาธารณะ PlatformTransactionManager {org.springframework.transaction.transactionstatus getTransaction (org.springframework.transaction.transactionDefinition TransactionDefinition) โยน org.springframework.Transaction.Transaction เป็นโมฆะ commit (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: คุณสามารถใช้อินเทอร์เฟซ TransactionManagementConfigurer และค่าส่งคืนของวิธีการภายในคือตัวจัดการธุรกรรมเริ่มต้น
2: คุณสามารถตั้งค่าในวิธีการดำเนินการเฉพาะ
หากมีหลายอินสแตนซ์ PlatformTransactionManager ในคอนเทนเนอร์ฤดูใบไม้ผลิและอินเตอร์เฟส TransactionManagementConfigurer จะไม่ถูกนำมาใช้เพื่อระบุค่าเริ่มต้นเมื่อเราใช้คำอธิบายประกอบ @TransActional บนวิธีนี้เราต้องระบุด้วยค่า หากไม่ได้ระบุไว้จะมีการโยนข้อยกเว้น
//@enableTransactionManagement // เปิดการจัดการธุรกรรมคำอธิบายประกอบซึ่งเทียบเท่ากับ <tx: คำอธิบายประกอบ-ไดรฟ์ />@springbootapplicationpublic คลาส profiledemoapplication โดยใช้ TransactionManagementConfigurer {@Resource // สร้างตัวจัดการธุรกรรมด้วยตนเอง 1 เฟรมเวิร์ก DataSource จะถูกฉีดโดยอัตโนมัติ // ในคอนเทนเนอร์ฤดูใบไม้ผลิเรามีคำอธิบายประกอบด้วยตนเอง @Bean ด้วยตนเองจะถูกโหลดก่อนและเฟรมเวิร์กจะไม่เริ่มต้นการใช้งาน PlatformTransactionManager อื่น ๆ อีกครั้ง @Bean (name = "txManager1") Public PlatformTransactionManager TxManager (DataSource DataSource) {ส่งคืน DataSourceTransactionManager ใหม่ (DataSource); } // สร้าง transactionManager 2 @Bean (name = "txManager2") Public PlatformTransactionManager TxManager2 (EntityManagerFactory Factory) {ส่งคืน JPatransactionManager ใหม่ (โรงงาน); } // ใช้เมธอด Interface TransactionManagementConfigurer ที่มีค่าส่งคืนแสดงถึงตัวจัดการธุรกรรมที่ใช้โดยค่าเริ่มต้นหากคุณมีผู้จัดการธุรกรรมหลายรายการ @Override Public PlatformTransActionManager AnnotationDriverTransactionManager () {return txManager2; } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {springapplication.run (profiledemoapplication.class, args); -การใช้งานเฉพาะ
@componentpublic คลาส devsendMessage ใช้ sendMessage {// ใช้ค่าเพื่อระบุตัวจัดการธุรกรรมที่จะใช้ @Transactional (value = "txManager1") @Override โมฆะสาธารณะส่ง () {system.out.println (">>>>>>>>>>>> send2 (); } @Transactional โมฆะสาธารณะ send2 () {system.out.println (">>>>>>>>>>>> dev send2 () <<<<<<<<"); -ระดับการแยก
การแยก enum สาธารณะ {ค่าเริ่มต้น (transactionDefinition.isolation_default), read_uncommitted (transactionDefinition.isolation_read_uncommitted), read_committed (transactionDefinition.isolation_recommitted) serializable (transactionDefinition.isolation_serializable); ค่า int สุดท้ายส่วนตัว; การแยก (ค่า int) {this.value = value; } ค่า int สาธารณะ () {return this.value; - ระบุวิธีการ: ตั้งค่าโดยใช้คุณสมบัติการแยกตัวอย่างเช่น:
@Transactional (isolation = isolation.default)
พฤติกรรมการสื่อสาร
พฤติกรรมการแพร่กระจายการทำธุรกรรมที่เรียกว่าหมายถึงหากมีบริบทการทำธุรกรรมอยู่แล้วก่อนที่จะเริ่มการทำธุรกรรมในปัจจุบันมีหลายตัวเลือกที่สามารถระบุพฤติกรรมการดำเนินการของวิธีการทำธุรกรรม
เราจะเห็นได้ว่า org.springframework.transaction.annotation.propagation การแจงนับคลาสกำหนดค่า enum 6 ค่าที่แสดงถึงพฤติกรรมการแพร่กระจาย:
การแพร่กระจายของ enum สาธารณะ {จำเป็น (transactionDefinition.propagation_Required), สนับสนุน (transactionDefinition.propagation_supports), บังคับ (transactionDefinition.propagation_mandatory) ต้องใช้ (transactionDefinition.propagation_requires_new) not_supported (transactionDefinition.propagation_not_supported), ไม่เคย (transactionDefinition.propagation_never), ซ้อน (transactionDefinition.propagation_nested); ค่า int สุดท้ายส่วนตัว; การแพร่กระจาย (ค่า int) {this.value = value; } ค่า int สาธารณะ () {return this.value; -จำเป็น: หากมีการทำธุรกรรมในปัจจุบันให้เข้าร่วมการทำธุรกรรม หากไม่มีธุรกรรมในปัจจุบันให้สร้างธุรกรรมใหม่ ค่าเริ่มต้น
สนับสนุน: หากมีการทำธุรกรรมอยู่ในปัจจุบันให้เข้าร่วมการทำธุรกรรม หากไม่มีธุรกรรมในปัจจุบันให้ดำเนินการต่อในลักษณะที่ไม่ใช่การทำธุรกรรม
บังคับ: หากมีการทำธุรกรรมเข้าร่วมการทำธุรกรรม หากไม่มีธุรกรรมในปัจจุบันข้อยกเว้นจะถูกโยนลงไป (ถูกบังคับให้นำไปทำธุรกรรม)
ต้องการ _New: สร้างธุรกรรมใหม่และหากการทำธุรกรรมมีอยู่ในปัจจุบันธุรกรรมปัจจุบันจะถูกระงับ (บันทึกการพิมพ์มักจะใช้แม้ว่าการย้อนกลับก่อนหน้านี้จะถูกย้อนกลับไปการทำธุรกรรมจะถูกดำเนินการและข้อความแสดงข้อผิดพลาดจะถูกบันทึก)
Not_supported: ทำงานในลักษณะที่ไม่ใช่การทำธุรกรรม หากมีการทำธุรกรรมในปัจจุบันธุรกรรมปัจจุบันจะถูกระงับ
ไม่เคย: ทำงานในลักษณะที่ไม่ใช่การค้าประเวณีโยนข้อยกเว้นหากมีการทำธุรกรรมอยู่ในปัจจุบัน
ซ้อนกัน: หากมีการทำธุรกรรมในปัจจุบันธุรกรรมจะถูกสร้างขึ้นเพื่อเรียกใช้เป็นธุรกรรมซ้อนของธุรกรรมปัจจุบัน หากไม่มีธุรกรรมในปัจจุบันค่าจะเท่ากับที่ต้องการ
ระบุวิธีการ: ตั้งค่าโดยใช้คุณสมบัติการแพร่กระจายตัวอย่างเช่น:
@Transactional (การแพร่กระจาย = การแพร่กระจายต้องการ)
การทำธุรกรรมไม่ใช่สถานการณ์ย้อนกลับ
ย้อนกลับไปเฉพาะเมื่อมีการรับรู้ uncaught
ข้อยกเว้นที่ถูกจับโดยการจับจะประสบความสำเร็จเมื่อมีส่วนแทรกทั้งสอง
@Override @Transactional โมฆะสาธารณะแทรก InsertandInsert (พนักงานพนักงาน) {StaffDao.Insert (พนักงาน); ลอง {int i = 1 /0; } catch (exception e) {e.printstacktrace (); } Staffdao.insert (พนักงาน); -เพิ่มลงในคำสั่ง Catch ของวิธีการให้บริการ: TransactionAspectSupport.currentTransactionStatus (). setRollBackonly (); คำสั่งการย้อนกลับด้วยตนเองจะไม่แทรกข้อมูล
@Override @Transactional โมฆะสาธารณะแทรก InsertandInsert (พนักงาน) โยนข้อยกเว้น {ลอง {StaffDao.Insert (พนักงาน); int i = 1/0; Staffdao.insert (พนักงาน); } catch (exception e) {transactionAspectSupport.currentTransactionStatus (). setRollBackonly (); -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น