2012-09-26 47 views
5

Tôi đã hai quản lý giao dịch quy định tại hai tập mùa xuân xml riêng biệt, và cả trong số họ nạp vào bối cảnh mùa xuânmùa xuân vấn đề quản lý nhiều giao dịch

file Một

<tx:annotation-driven transaction-manager="transactionManager1"/> 

    <bean id="transactionManager1" 
     class="org.springframework.jdbc.DataSourceTransactionManager"> 
    ... 
    </bean> 

file Hai

<tx:annotation-driven transaction-manager="transactionManager2"/> 
    <bean id="transactionManager2" 
      class="org.springframework.jdbc.DataSourceTransactionManager"> 
    ... 
    </bean> 

Nếu tôi không chỉ định bất kỳ vòng loại nào cho dịch vụ dưới đây, mùa xuân mà người quản lý giao dịch sẽ sử dụng.

public class TransactionalService { 

    @Transactional 
    public void setSomething(String name) { ... } 

    @Transactional 
    public void doSomething() { ... } 
} 

Trả lời

13

Check-out 11.5.6 Using @Transactional từ các tài liệu chính thức:

Bạn có thể bỏ qua transaction-manager thuộc tính trong thẻ <tx:annotation-driven/> nếu tên đậu của PlatformTransactionManager mà bạn muốn để dây trong có tên transactionManager. Nếu PlatformTransactionManager đậu mà bạn muốn sự phụ thuộc bơm có bất kỳ tên nào khác, sau đó bạn phải sử dụng thuộc tính transaction-manager rõ ràng [...]

Kể từ khi không ai trong số các nhà quản lý giao dịch của bạn được đặt tên transactionManager, bạn phải xác định quản lý giao dịch nên được sử dụng cho các phương pháp được đánh dấu bằng @Transactional.


CẬP NHẬT: để giải quyết câu hỏi đã sửa đổi của bạn. Bạn có thể xác định những giao dịch quản lý để sử dụng trên @Transactional chú thích (xem: @Transactional.value()):

@Transactional("transactionManager1") 
//... 

@Transactional("transactionManager2") 
//... 

Tuy nhiên tôi thấy một số vấn đề với thiết lập hiện tại của bạn:

  • bạn xác định <tx:annotation-driven/> hai lần với các nhà quản lý giao dịch khác nhau. Tôi không cho rằng cấu hình như vậy là hợp lệ

  • mà không cung cấp cho người quản lý giao dịch một cách rõ ràng, cái nào sẽ được sử dụng?

Các giải pháp tôi nghĩ nên làm việc là xác định <tx:annotation-driven transaction-manager="transactionManager1"/> lần và sử dụng @Transactional sử dụng quản lý đầu tiên và @Transactional("transactionManager2") sử dụng một giây. Hoặc cách khác xung quanh.

+0

ok, tôi đã thực hiện một số sửa đổi đối với câu hỏi của mình, thực sự đây là vấn đề tôi đang gặp phải. – user1330526

+0

@ user1330526: xem các cập nhật của tôi –

+0

Tôi cần xác định nhiều '' cho nhiều người quản lý giao dịch, khác Mùa xuân không thể thấy người quản lý giao dịch của tôi. –

Các vấn đề liên quan