Tôi có một ứng dụng springframework trong đó tôi muốn thêm một người nghe giao dịch vào một giao dịch hiện đang được tiến hành. Động lực là kích hoạt một hành động cam kết đăng bài thông báo cho các hệ thống hạ lưu. Tôi đang sử dụng @Transactional để gói giao dịch xung quanh một số phương thức dịch vụ - đó là nơi tôi muốn tạo/đăng ký trình xử lý giao dịch bài đăng. Tôi muốn làm một cái gì đó "như" sau đây.tự động đăng ký người nghe giao dịch với mùa xuân?
public class MyService {
@Transaction
public void doIt() {
modifyObjects();
// something like this
getTransactionManager().registerPostCommitAction(new
TransactionSynchronizationAdapter() {
public void afterCommit() {
notifyDownstream();
}
});
}
}
Mùa xuân có giao diện TransactionSynchronization và lớp bộ điều hợp có vẻ chính xác những gì tôi muốn; tuy nhiên, không rõ ngay cách đăng ký một cách động với giao dịch hiện tại hoặc người quản lý giao dịch. Tôi không muốn phân lớp JtaTransactionManager nếu tôi có thể tránh nó.
Q: Có ai đã làm điều này trước đây.
Q: cách đơn giản nhất để đăng ký bộ điều hợp của tôi là gì?
Một đề xuất tốt, tuy nhiên, điều này sẽ không thực thi trong bất kỳ giao dịch nào? Tôi chỉ muốn hoàn thành thành công. Ngoài ra, tôi có thể sử dụng những chú thích AOP với mùa xuân mặc định (tôi không sử dụng mã hóa dệt) chỉ JDK proxy. – Justin
Lời khuyên trả về không chạy khi phương thức ném ngoại lệ, vì vậy điều này phụ thuộc vào @Transactional cam kết khi phương thức trả về kết quả và quay lại khi ném ngoại lệ, thường là điều xảy ra. Các khía cạnh được gọi thông qua các proxy động của lò xo nên nó không thực hiện bất kỳ mã nào dệt (trừ khi bạn không cung cấp giao diện cho mùa xuân đến proxy, nơi mùa xuân sẽ quay trở lại để dệt mã trong thời gian chạy với cglib). – krock
+1 cho thú vị, nhưng tôi vẫn không thuyết phục mà không thử nghiệm. Có ít nhất 2 @AfterReturning tham gia: @Transactional và sau đó là Aspect tùy chỉnh của tôi. Nếu @Transactional chạy, sau đó tôi chạy tất cả là tốt; tuy nhiên theo thứ tự khác, tôi sẽ thực hiện trước - độc lập với trạng thái cam kết giao dịch. – Justin