หากมีใครสามารถอธิบายได้ว่าคำอธิบายประกอบนี้ทำอะไรและเราใช้เมื่อใด:
@Transactional(propagation=Propagation.REQUIRED)
ขอบคุณ
หากมีใครสามารถอธิบายได้ว่าคำอธิบายประกอบนี้ทำอะไรและเราใช้เมื่อใด:
@Transactional(propagation=Propagation.REQUIRED)
ขอบคุณ
คำตอบ:
เมื่อการตั้งค่าการแพร่กระจายเป็น PROPAGATION_REQUIRED ขอบเขตของธุรกรรมทางตรรกะจะถูกสร้างขึ้นสำหรับแต่ละวิธีที่ใช้การตั้งค่านี้ แต่ละขอบเขตธุรกรรมเชิงตรรกะดังกล่าวสามารถกำหนดสถานะเฉพาะการย้อนกลับได้ทีละรายการโดยขอบเขตธุรกรรมภายนอกจะเป็นอิสระจากขอบเขตธุรกรรมภายใน แน่นอนในกรณีของพฤติกรรม PROPAGATION_REQUIRED มาตรฐานขอบเขตทั้งหมดเหล่านี้จะถูกจับคู่กับธุรกรรมทางกายภาพเดียวกัน ดังนั้นตัวทำเครื่องหมายแบบย้อนกลับเท่านั้นที่ตั้งค่าในขอบเขตธุรกรรมภายในจึงส่งผลต่อโอกาสของธุรกรรมภายนอกที่จะกระทำจริง (ตามที่คุณคาดหวัง)
http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html
หากคุณต้องการคำอธิบายเกี่ยวกับการใช้งานนอกเหนือจากที่ระบุไว้ในSpring Docs
พิจารณารหัสนี้ ...
class Service {
@Transactional(propagation=Propagation.REQUIRED)
public void doSomething() {
// access a database using a DAO
}
}
เมื่อ doSomething () ถูกเรียกว่ารู้ว่าต้องเริ่ม Transaction บนฐานข้อมูลก่อนที่จะดำเนินการ หากผู้เรียกใช้เมธอดนี้ได้เริ่มทำธุรกรรมแล้ววิธีนี้จะใช้ธุรกรรมทางกายภาพเดียวกันกับการเชื่อมต่อฐานข้อมูลปัจจุบัน
@Transactional
คำอธิบายประกอบนี้ให้วิธีการบอกรหัสของคุณเมื่อดำเนินการว่าต้องมีธุรกรรม มันจะไม่ทำงานโดยไม่มีอย่างใดอย่างหนึ่งดังนั้นคุณสามารถตั้งสมมติฐานนี้ในรหัสของคุณว่าคุณจะไม่เหลือข้อมูลที่ไม่สมบูรณ์ในฐานข้อมูลของคุณหรือต้องล้างข้อมูลบางอย่างหากมีข้อยกเว้นเกิดขึ้น
การจัดการธุรกรรมเป็นเรื่องที่ค่อนข้างซับซ้อนดังนั้นหวังว่าคำตอบที่เข้าใจง่ายนี้จะเป็นประโยชน์
@Transactional
ในชั้นบริการของคุณแล้วไม่มีข้อกำหนดเพิ่มเติมใด ๆ ที่จะต้องเพิ่ม@Transactional
เมธอด DAO ที่ถูกเรียกภายในธุรกรรมนั้น
doSomething()
เรียกใช้เมธอดอื่นที่ซ้อนกันโดยไม่มี @transactional ธุรกรรมเดียวกันนี้จะใช้กับวิธีการเรียกใช้ด้วยหรือไม่
ในแอปพลิเคชัน Spring หากคุณเปิดใช้งานการสนับสนุนธุรกรรมตามคำอธิบายประกอบโดยใช้<tx:annotation-driven/>
และใส่คำอธิบายประกอบคลาส / วิธีการใด ๆ ด้วย@Transactional (การแพร่กระจาย = การแพร่กระจาย. REQUIRED)กรอบงาน Spring จะเริ่มต้นธุรกรรมและดำเนินการเมธอดและทำธุรกรรม หาก RuntimeException ใด ๆ เกิดขึ้นธุรกรรมจะถูกย้อนกลับ
การขยายพันธุ์จริง = การขยายพันธุ์ REQUIRED คือระดับการแพร่กระจายเริ่มต้นคุณไม่จำเป็นต้องกล่าวถึงอย่างชัดเจน
สำหรับข้อมูลเพิ่มเติม: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations
เพื่อให้เข้าใจถึงการตั้งค่าต่างๆในการทำธุรกรรมและพฤติกรรมที่นำมาใช้สำหรับการจัดการการทำธุรกรรมเช่นREQUIRED
, ISOLATION
ฯลฯ คุณจะต้องเข้าใจพื้นฐานของการจัดการการทำธุรกรรมเอง
อ่านการจัดการการติดตามสำหรับข้อมูลเพิ่มเติมเกี่ยวกับคำอธิบาย