Chỉ cần hiểu hoạt động của các giao dịch Mùa xuân, tôi muốn biết điều gì sẽ xảy ra trong trường hợp sau khi một phương thức được đánh dấu là @Transactional
gọi một phương thức khác được đánh dấu là @Transactional
.Hiểu các giao dịch mùa xuân - Điều gì sẽ xảy ra khi một phương thức giao dịch gọi một phương thức giao dịch khác?
Giả sử cấu hình sử dụng tất cả các cài đặt mặc định.
@Service("myService")
@Transactional
public MyService{
public void myServiceMethod(){
myDAO.getSomeDBObjects();
}
}
@Repository("myDAO")
@Transactional
public MyDAOWithUsesBeyondMyService{
public void getSomeDBObjects(){...}
}
Bây giờ, nếu tôi nhập MyService.myServiceMethod()
thì sẽ bắt đầu giao dịch rõ ràng. Sau đó, khi khoan vào myDAO.getSomeDBObjects()
điều gì sẽ xảy ra? Thực tế là một giao dịch đã tồn tại không có giao dịch mới nào được sinh ra hay tôi đang tạo hai giao dịch tại đây?
Tài liệu (được trích dẫn bên dưới) về Tuyên truyền dường như đề cập đến điều này, nhưng tôi muốn xác minh sự hiểu biết của mình, đó là một chút ít cho bộ não trinh của tôi để hiểu tất cả cùng một lúc.
Tuyên truyền: Thông thường, tất cả các mã thực hiện trong một phạm vi giao dịch sẽ chạy trong giao dịch đó. Tuy nhiên, bạn có tùy chọn chỉ định hành vi trong trường hợp phương thức giao dịch được thực thi khi ngữ cảnh giao dịch đã tồn tại. Ví dụ: mã có thể tiếp tục chạy trong giao dịch hiện tại (trường hợp phổ biến ); hoặc giao dịch hiện tại có thể bị tạm ngừng và tạo giao dịch mới. Spring cung cấp tất cả các tùy chọn tuyên truyền giao dịch quen thuộc từ EJB CMT. Để đọc về ngữ nghĩa giao dịch tuyên truyền trong Mùa xuân, hãy xem Phần 10.5.7, “Tuyên truyền giao dịch”.
Cảm ơn, vâng, tôi không có ý định làm điều này, nhưng câu hỏi xuất hiện khi tôi nhận ra rằng tôi đã khai báo @Transactional ở cấp độ dịch vụ và một phương thức của dịch vụ đang gọi một phương thức dịch vụ khác (cả giao dịch). Tất nhiên tôi vẫn đọc và nhận ra rằng, vì tôi đang sử dụng proxy, phương pháp thứ hai này sẽ không được quản lý bởi proxy giao dịch, vì vậy nó giống như bất kỳ cuộc gọi phương thức nào khác (đủ để làm rối loạn bộ não mới được bắt đầu). :) Nhưng nó làm tôi tò mò đủ để đảm bảo tôi hiểu chi tiết về cách nó hoạt động, bạn đã làm rõ rằng đối với tôi tốt. Cảm ơn! –
@ David Tôi nghĩ rằng bạn hiểu lầm khái niệm proxy một chút. Đọc bản cập nhật của tôi. –
Bạn hoàn toàn chính xác, bình luận của tôi là sai lầm (thực ra tôi đã chuyển những giả định mà không nói như vậy), nhưng tôi hiểu những gì bạn đang nói, và sau tất cả những điều đó, tôi nghĩ toàn bộ điều này cũng bắt nguồn từ đầu tôi. Cảm ơn bạn đã cập nhật và biểu đồ tuyệt vời, tôi chắc chắn nhiều người khác sẽ thấy nó hữu ích trong các tìm kiếm của họ trong tương lai! –