2012-09-26 77 views
5

我已經在兩個單獨的Spring XML文件中定義了兩種事務經理,他們都加載到Spring上下文春天多個事務經理問題

文件中的一個

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

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

文件中的兩個

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

如果我沒有爲下面的服務表示任何限定符,哪個事務管理器彈簧將要使用。

public class TransactionalService { 

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

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

回答

13

檢查從官方文檔了11.5.6 Using @Transactional

您可以省略在<tx:annotation-driven/>標籤的transaction-manager屬性,如果要連線在PlatformTransactionManager bean的名稱具有名稱transactionManager。如果您要依賴注入具有任何其他名稱的PlatformTransactionManager豆,那麼你必須明確地使用transaction-manager屬性[...]

由於沒有你的事務管理器被命名爲transactionManager,你必須指定事務管理器應該用於標記爲@Transactional的方法。


更新:解決您修改後的問題。您可以指定對@Transactional註釋使用的事務管理器(參見:@Transactional.value()):

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

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

但是我看到的幾個問題與當前設置:

  • 你與不同的事務管理定義<tx:annotation-driven/>兩次。我不認爲這樣的配置是有效的

  • 沒有明確提供事務管理器,應該使用哪一個?

我覺得應該工作的解決方案是定義<tx:annotation-driven transaction-manager="transactionManager1"/>一次使用@Transactional使用第一經理和@Transactional("transactionManager2")來使用第二個。或者相反。

+0

好的,我對我的問題做了一些修改,實際上這是我面臨的問題。 – user1330526

+0

@ user1330526:查看我的更新 –

+0

我需要爲多個事務管理器定義多個'',否則Spring無法看到我的事務管理器。 –