ธุรกรรม
อธิบายธุรกรรม ClientSession ของ MongoDB ใน getTxJob, การแพร่กระจายเซสชันของ Reactor Context, ความรับผิดชอบในการลองใหม่ และขอบเขตธุรกรรมของ Spring
getTxJob
getTxJob(...) จะเปิด ClientSession โดยใช้ MongoExecutionContext.startSession() และเริ่มธุรกรรม จากนั้นจะใส่การผูกเซสชันใน Reactor Context เมื่อเสร็จสิ้นปกติจะทำการ commit, หากเกิดข้อผิดพลาด/ยกเลิกจะทำการ abort ธุรกรรมที่ใช้งานอยู่ และสุดท้ายจะปิดเซสชันตามลำดับ
ขอบเขตเซสชัน
เซสชันธุรกรรมจะถูกแพร่กระจายไปยังการดำเนินการ DSL เดียวกันโดย MongoExecutionContext#getSessionScope() DriverMongoExecutionContext พื้นฐานจะใช้ MongoClient ของตนเองเป็นขอบเขตเซสชัน
การลองทำธุรกรรมใหม่เป็นความรับผิดชอบของผู้เรียก.
getTxJob(...) จะไม่ลองทำธุรกรรม MongoDB ที่เกิดข้อผิดพลาดเช่น TransientTransactionError โดยอัตโนมัติ การตัดสินใจว่าจะลองทำใหม่หรือจำนวนครั้งขึ้นอยู่กับความเป็นอัตลักษณ์ของการดำเนินการ ผลข้างเคียงภายนอก และกฎทางธุรกิจที่รู้จักโดยแอปพลิเคชันที่เรียก.
ขอบเขตของธุรกรรม Spring.
Spring @Transactional / TransactionalOperator.
ขอบเขตของธุรกรรม/เซสชันที่จัดการโดย Spring Data MongoDB.
ReactiveMongoDsl#getTxJob.
DSL เริ่ม ClientSession โดยตรงและส่งต่อไปยัง Reactor Context.