1. กลไกการทำธุรกรรมของฤดูใบไม้ผลิ
เทคโนโลยีการเข้าถึงข้อมูลทั้งหมดมีกลไกการประมวลผลธุรกรรมซึ่งให้ APIs เพื่อเปิดใช้งานธุรกรรมทำธุรกรรมเพื่อดำเนินการข้อมูลให้เสร็จสมบูรณ์หรือย้อนกลับข้อมูลเมื่อเกิดข้อผิดพลาด
กลไกการทำธุรกรรมของสปริงใช้กลไกแบบรวมเพื่อจัดการธุรกรรมของเทคโนโลยีการเข้าถึงข้อมูลที่แตกต่างกัน กลไกการทำธุรกรรมของสปริงให้อินเทอร์เฟซ PlatformTransactionManager และการทำธุรกรรมของเทคโนโลยีการเข้าถึงข้อมูลที่แตกต่างกันจะถูกนำมาใช้โดยใช้อินเทอร์เฟซที่แตกต่างกัน:
รหัสสำหรับการกำหนดผู้จัดการธุรกรรมในโปรแกรมมีดังนี้:
@Bean Public PlatformTransactionManager TransactionManager () {JPatransactionManager TransactionManager = JPatransactionManager ใหม่ (); TransactionManager.SetDataSource (DataSource ()); TransactionManager กลับ; -2. การทำธุรกรรมที่ประกาศ
สปริงรองรับการทำธุรกรรมที่ประกาศนั่นคือการใช้คำอธิบายประกอบเพื่อเลือกวิธีการที่ต้องใช้การทำธุรกรรม มันใช้คำอธิบายประกอบ @Transactional เพื่อระบุวิธีการที่วิธีนี้ต้องการการสนับสนุนการทำธุรกรรม
@Transactional public void savesomething (id ยาว, ชื่อสตริง) {// การดำเนินการฐานข้อมูล}เป็นสิ่งสำคัญที่จะต้องทราบที่นี่ว่าคำอธิบายประกอบ @Transactional นี้มาจาก org.springframework.transaction.nanotation แพ็คเกจไม่ใช่ javax.transaction
ฤดูใบไม้ผลิให้คำอธิบายประกอบ @EnableTransactionManagement เพื่อเปิดใช้งานการสนับสนุนการทำธุรกรรมแบบประกาศในคลาสการกำหนดค่า หลังจากใช้ @EnableTransactionManagement คอนเทนเนอร์สปริงจะสแกนวิธีการและคลาสโดยอัตโนมัติ @Transactional @EnableTransactionManagement ใช้ดังนี้:
@Configuration @enableTransactionManagement คลาสสาธารณะ AppConfig {}3. ใช้ @Transactional ในระดับชั้นเรียน
@Transactional ไม่เพียงสามารถใส่คำอธิบายประกอบกับวิธีการ แต่ยังอยู่ในชั้นเรียนด้วย เมื่อใส่คำอธิบายประกอบในชั้นเรียนหมายความว่าวิธีการสาธารณะทั้งหมดของคลาสนี้ได้รับการเปิดใช้งานการทำธุรกรรม หากระดับคลาสและระดับวิธีใช้คำอธิบายประกอบ @Transactional ที่ระดับคลาสคำอธิบายประกอบระดับวิธีการจะมากเกินไปโดยใช้ระดับคลาส
4. การสนับสนุนธุรกรรมสำหรับสปริงข้อมูล JPA
Spring Data JPA เปิดใช้งานการสนับสนุนการทำธุรกรรมสำหรับวิธีการเริ่มต้นทั้งหมดและคุณสมบัติ ReadOnly = True ถูกเปิดใช้งานโดยค่าเริ่มต้นสำหรับการทำธุรกรรมแบบสอบถาม
สิ่งนี้สามารถเห็นได้จากซอร์สโค้ด simplejparepository ที่ simplejparepository กำหนด @TransActional (อ่านค่า = จริง) ในระดับคลาสในขณะที่คุณสมบัติ @TransActional ถูกเขียนใหม่ในการดำเนินการที่เกี่ยวข้องกับการบันทึกและลบ ในเวลานี้คุณสมบัติแบบอ่านอย่างเดียวเป็นเท็จและการดำเนินการค้นหาอื่น ๆ อย่างเดียวยังคงเป็นเท็จ
5. สนับสนุนธุรกรรมของ Spring Boot
1. กำหนดค่า Transaction Manager โดยอัตโนมัติ
เมื่อใช้ JDBC เป็นเทคโนโลยีการเข้าถึงข้อมูล Springboot จะกำหนดถั่วของ PlatformTransactionManager สำหรับเรา ดูคำจำกัดความใน org.springframework.boot.autoconfigure.jdbc.datasourcetransactionmanagerautoconfiguration คลาส:
@Bean @ConditionAlonMissingBean @ConditionAlonBean (DataSource.class) Public PlatformTransactionManager TransactionManager () {ส่งคืน DataSourceTransactionManager ใหม่ (this.datasource); -เมื่อใช้ JPA เป็นเทคโนโลยีการเข้าถึงข้อมูล Spring Boot จะกำหนดถั่วสำหรับการใช้งาน PlatformTransactionManager ของ JPatransactionManager; ดูคำจำกัดความใน org.springframework.boot.autoconfigure.orm.jpa.jpabaseconfiguration.class คลาส: คลาส: คลาส: คลาส
@Bean @ConditionAlonMissingBean (PlatformTransactionManager.class) Public PlatformTransactionManager TransactionManager () {ส่งคืน JPatransactionManager ใหม่ (); - 2. เปิดใช้งานการสนับสนุนการทำธุรกรรมคำอธิบายประกอบโดยอัตโนมัติ
Spring Boot ใช้เป็นพิเศษเพื่อกำหนดค่าการทำธุรกรรมเป็น org.springframework.boot.autoconfigure.transaction.transactionautoconfiguration คลาสการกำหนดค่านี้ขึ้นอยู่กับ JPABASECONFIGURATION และ DATASOURCETRANCANTANTANTMANAGERAUTOCONFIGURATION
การสนับสนุนสำหรับการทำธุรกรรมที่เปิดเผยยังเปิดใช้งานในการกำหนดค่า DataSourceTransactionManageraUtoconFiguration รหัสมีดังนี้:
@ConditionAlonMissingBean (AbstractTransactionManagementConfiguration.class) @configuration @enabletransactionManagement การป้องกันการทำธุรกรรมระดับคงที่ TransactionManagementConfiguration {}ดังนั้นใน Spring Boot ไม่จำเป็นต้องแสดงคำอธิบายประกอบ @EnableTransactionManagement
6. ตัวอย่าง (Springboot)
1.Pom.xml:
<การพึ่งพา> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Web </Artifactid> </การพึ่งพาอาศัย> <การพึ่งพา <RoupID> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Data-Rest </artifactid> </การพึ่งพาอาศัย> <การพึ่งพาอาศัย> <roupId> MySQL </GroupId>
2. Application.yml:
เซิร์ฟเวอร์: พอร์ต: 5000 สปริง: DataSource: driver-class-name: com.mysql.jdbc.driver url: jdbc: mysql: // localhost: 3306/test? useunicode = true & aritiencoding = utf8 & attleResults = UTF8 username: รูท show-sql: จริง
3. พนักงานชั้นเรียน:
@Entity Public Class Staff {@ID @IneratedValue Private Long ID; ชื่อสตริงส่วนตัว; อายุจำนวนเต็มส่วนตัว ที่อยู่สตริงส่วนตัว เจ้าหน้าที่สาธารณะ () {super (); } พนักงานสาธารณะ (ID ยาว, ชื่อสตริง, อายุจำนวนเต็ม, ที่อยู่สตริง) {super (); this.id = id; this.name = ชื่อ; this.age = อายุ; this.address = ที่อยู่; } // ละเว้นวิธีการรับและตั้งค่า}4. ที่เก็บพนักงาน:
Interface Public StaffRepository ขยาย JParePository <Staff, Long> {}5. อินเทอร์เฟซบริการ:
พนักงานติดต่อสาธารณะบริการ {พนักงานสาธารณะ SavestaffwithRollback (พนักงานพนักงาน); // Rollingback พนักงานสาธารณะ Savestaffwithoutrollback (พนักงานพนักงาน); // อย่าย้อนกลับ}6. การใช้บริการ:
@Service Class Public Class StaffserviceImpl ใช้พนักงานบริการ {@AutoWired StaffRepository StaffRepository; // คุณสามารถฉีดถั่วของ Rersonrepository ของเราได้โดยตรง @Override // ใช้แอตทริบิวต์การย้อนกลับของ @Transactional Annotation เพื่อระบุข้อยกเว้นเฉพาะข้อมูลจะถูกย้อนกลับ @TransActional (rollbackfor = {unglemalargumentException.class}) เจ้าหน้าที่สาธารณะ SavestaffwithRollback (พนักงานพนักงาน) {พนักงาน S = StaffRepository.save (พนักงาน); if (Staff.getName (). เท่ากับ ("จางซาน")) {โยนใหม่ที่ผิดกฎหมาย EllegalArgumentException ("จางซานมีอยู่แล้ว, ย้อนกลับ"); } return s; } @Override พนักงานสาธารณะ Savestaffwithoutrollback (พนักงานพนักงาน) {Staff S = StaffRepository.save (พนักงาน); if (Staff.getName (). เท่ากับ ("จางซาน")) {โยน unlegalargumentException ใหม่ ("จางซานมีอยู่แล้วข้อมูลไม่ได้ย้อนกลับ"); } return s; -7. ตัวควบคุม:
@RestController @RequestMapping ("/พนักงาน") StaffController ชั้นเรียนสาธารณะ {@AutoWired StaffService StaffService; // ทดสอบสถานการณ์ย้อนกลับ @RequestMapping ("/ย้อนกลับ") เจ้าหน้าที่สาธารณะย้อนกลับ (พนักงาน) {return StaffService.SavestaffWithRollback (พนักงาน); } // ทดสอบสถานการณ์ย้อนกลับ @requestmapping ("/notrollback") พนักงานสาธารณะ Norollback (พนักงานพนักงาน) {return Staffservice.savestaffwithoutrollback (พนักงาน); -8. เรียกใช้การทดสอบ:
(1) การย้อนกลับ: http: // localhost: 5000/พนักงาน/ย้อนกลับ? name = Zhang San & Age = 18
คอนโซล:
ฐานข้อมูล:
(2) ไม่มีการย้อนกลับ: http: // localhost: 5000/พนักงาน/notrollback? name = Zhang San & Age = 18
คอนโซล:
ฐานข้อมูล:
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น