nếu ai đó có thể giải thích chú thích này làm gì và khi nào chính xác thì chúng tôi sử dụng nó:
@Transactional(propagation=Propagation.REQUIRED)
Cảm ơn
nếu ai đó có thể giải thích chú thích này làm gì và khi nào chính xác thì chúng tôi sử dụng nó:
@Transactional(propagation=Propagation.REQUIRED)
Cảm ơn
Câu trả lời:
Khi cài đặt truyền là PROPAGATION_REQUIRED, một phạm vi giao dịch hợp lý được tạo cho mỗi phương pháp mà cài đặt được áp dụng. Mỗi phạm vi giao dịch logic như vậy có thể xác định trạng thái chỉ khôi phục một cách riêng lẻ, với phạm vi giao dịch bên ngoài độc lập về mặt logic với phạm vi giao dịch bên trong. Tất nhiên, trong trường hợp hành vi PROPAGATION_REQUIRED tiêu chuẩn, tất cả các phạm vi này sẽ được ánh xạ tới cùng một giao dịch vật lý. Vì vậy, một điểm đánh dấu chỉ khôi phục được đặt trong phạm vi giao dịch bên trong ảnh hưởng đến cơ hội thực sự cam kết của giao dịch bên ngoài (như bạn mong đợi).
http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html
Nếu bạn cần một lời giải thích của giáo dân về việc sử dụng ngoài phạm vi được cung cấp trong Tài liệu mùa xuân
Hãy xem xét mã này ...
class Service {
@Transactional(propagation=Propagation.REQUIRED)
public void doSomething() {
// access a database using a DAO
}
}
Khi doSomething () được gọi, nó biết rằng nó phải bắt đầu một Giao dịch trên cơ sở dữ liệu trước khi thực thi. Nếu người gọi phương thức này đã bắt đầu một Giao dịch thì phương thức này sẽ sử dụng cùng một Giao dịch vật lý đó trên kết nối cơ sở dữ liệu hiện tại.
@Transactional
Chú thích này cung cấp một phương tiện thông báo cho mã của bạn khi mã thực thi rằng nó phải có Giao dịch. Nó sẽ không chạy mà không có một, vì vậy bạn có thể đưa ra giả định này trong mã của mình rằng bạn sẽ không bị bỏ lại dữ liệu không đầy đủ trong cơ sở dữ liệu của mình hoặc phải dọn dẹp thứ gì đó nếu một ngoại lệ xảy ra.
Quản lý giao dịch là một chủ đề khá phức tạp nên hy vọng câu trả lời đơn giản này sẽ hữu ích
@Transactional
lớp dịch vụ của mình, không có yêu cầu nào khác để thêm @Transactional
vào các phương thức DAO đang được gọi trong giao dịch đó.
doSomething()
gọi một phương thức lồng nhau khác mà không có bất kỳ @transactional nào thì giao dịch tương tự này cũng sẽ áp dụng cho phương thức gọi đó?
Trong các ứng dụng Spring, nếu bạn bật hỗ trợ giao dịch dựa trên chú thích bằng cách sử dụng <tx:annotation-driven/>
và chú thích bất kỳ lớp / phương thức nào với @Transactional (tuyên truyền = Tuyên truyền.REQUIRED) . Nếu bất kỳ RuntimeException nào xảy ra thì giao dịch sẽ được khôi phục.
Trên thực tế, mức độ lan truyền = Spreadation.REQUIRED là mức độ lan truyền mặc định, bạn không cần phải đề cập rõ ràng về nó.
Để biết thêm thông tin: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-decl Compare-annotations
Để hiểu các cài đặt và hành vi giao dịch khác nhau được áp dụng cho quản lý Giao dịch, chẳng hạn như REQUIRED
,ISOLATION
v.v. bạn sẽ phải hiểu những điều cơ bản về quản lý giao dịch.
Đọc quản lý Trasaction để biết thêm về giải thích.