2012-09-26 4 views
5

Ich habe zwei Transaktionsmanager in zwei separate Feder XML-Datei definiert sind, und beide in den Frühling KontextFrühjahr mehrere Transaktionsmanager Ausgabe

Datei-One

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

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

Datei Zwei

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

Wenn ich keinen Qualifier für den folgenden Service angegeben habe, welchen Transaktionsmanager Spring verwenden.

public class TransactionalService { 

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

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

Antwort

13

Check out 11.5.6 Using @Transactional von der offiziellen Dokumentation:

können Sie das transaction-manager Attribut in dem <tx:annotation-driven/> Tag weglassen, wenn die Bohne Namen der PlatformTransactionManager, die Sie in den Namen transactionManager haben verdrahten mögen. Wenn die PlatformTransactionManager Bohne, die Sie einen anderen Namen hat der Abhängigkeits-inject wollen, dann müssen Sie explizit die transaction-manager Attribut [...]

Da keiner von Ihnen Transaktionsmanager transactionManager genannt werden, müssen Sie angeben, welche Der Transaktionsmanager sollte für Methoden verwendet werden, die mit @Transactional markiert sind.


UPDATE: um Ihre geänderte Frage zu adressieren. Sie können die Transaktions-Manager verwenden, um auf @Transactional Anmerkung angeben (siehe: @Transactional.value()):

  • Sie definieren <tx:annotation-driven/> zweimal mit unterschiedlichen Transaktionsmanager:

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

    Jedoch habe ich einige Probleme mit Ihrem aktuellen Setup zu sehen. Ich glaube nicht, dass eine solche Konfiguration gültig ist

  • ohne Transaktionsmanager explizit, welche sollte man verwenden?

Die Lösung Ich denke sollte, ist arbeiten <tx:annotation-driven transaction-manager="transactionManager1"/> einmal zu definieren und verwenden @Transactional erste Manager zu verwenden und @Transactional("transactionManager2") die zweite zu verwenden. Oder umgekehrt.

+0

ok, ich habe einige Änderungen an meiner Frage vorgenommen, eigentlich ist das das Problem, was ich vor mir habe. – user1330526

+0

@ user1330526: siehe meine Updates –

+0

Ich muss mehrere ' 'für mehrere Transaktionsmanager definieren, sonst Spring kann meine Transaktionsmanager nicht sehen. –

Verwandte Themen