Tôi tìm thấy thread sau: How exactly JdbcTemplate with TransactionManager works together?Trình quản lý giao dịch Spring có ràng buộc kết nối với một luồng không?
Câu đầu tiên của rằng:
Theo như tôi hiểu DataSourceTransactionManager liên kết với một kết nối JDBC từ DataSource quy định để xử lí hiện tại, cho phép một thread-bound Kết nối cho mỗi nguồn dữ liệu. Nếu đó là một nhóm các kết nối, nó sẽ có một trong các kết nối có sẵn.
... chính xác là những gì tôi muốn biết.
Khi sử dụng trình quản lý giao dịch, bạn có kết thúc với từng chuỗi có kết nối đơn riêng không? Ngoài ra, kết nối đó tồn tại bao lâu? Liệu cùng một luồng có sử dụng cùng một kết nối trong suốt một yêu cầu hay không, hoặc có cái gì khác đang diễn ra không? Tôi chỉ đang cố gắng hiểu chính xác Spring đang làm gì bên dưới khi bạn có một người quản lý giao dịch và khi bạn không (bất kể bạn có thực sự có giao dịch hay không).
Cảm ơn bạn đã phản hồi. Nó giúp tôi hiểu thêm một chút về những gì đang xảy ra. Tôi hiểu cách quản lý giao dịch cho phép giao dịch mở rộng cho nhiều hoạt động. Tuy nhiên, trong trường hợp của tôi, tôi có @Transactional (propagation = Propagation.SUPPORTS) trên mỗi phương thức DAO của tôi, nghĩa là mỗi cuộc gọi sẽ sử dụng giao dịch độc lập của riêng nó. Sau khi người quản lý nhận được một kết nối ban đầu từ các hồ bơi hiện nó sau đó ràng buộc rằng kết nối đến các chủ đề hiện tại, và sau đó lấy nó từ đó cho cuộc đời của chủ đề, thay vì quay trở lại hồ bơi để có được một kết nối? – dnc253
"mỗi cuộc gọi sẽ sử dụng giao dịch độc lập riêng" - điều này không đúng. DAO của bạn sẽ "kế thừa" bất kỳ giao dịch hiện tại nào đã bị ràng buộc vào luồng. nó sẽ không bắt đầu một cái mới trừ khi không có cái nào bị ràng buộc. – skaffman
Tôi đoán cách tôi định nghĩa "giao dịch" không hoàn toàn chính xác.Cách tôi đã hiểu một giao dịch là khi bạn có một hoạt động DB đơn (có thể có bất kỳ số lượng cập nhật, chèn, vv) Tất cả xảy ra hoặc không có điều gì xảy ra. Cách DAO được thiết lập, mỗi phương thức sẽ hoạt động trên DB độc lập với các phương thức khác. Nếu một phương pháp thất bại, nó sẽ không ảnh hưởng đến những hoạt động nào được thực hiện bởi các phương thức khác trước hoặc sau khi phương thức thất bại. Vậy, chính xác thì "giao dịch" là gì? Tôi đã nghĩ rằng mỗi phương pháp sẽ tạo ra giao dịch mới của riêng nó, nhưng rõ ràng đó không phải là trường hợp? – dnc253