2012-09-26 19 views
5

iki işlem yöneticisi iki ayrı yay xml dosyasında tanımladığınız ve her ikisi de bahar bağlamında yüklenenbahar birden işlem yöneticisi sorunu

Dosya One

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

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

Dosya İki

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

Aşağıdaki servis için herhangi bir niteleyici belirtmediysem, hangi işlem yöneticisi yayı kullanacaksınız.

public class TransactionalService { 

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

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

cevap

13

kontrol resmi belgelere dışarı 11.5.6 Using @Transactional: İçinde tel istediğiniz PlatformTransactionManager arasında fasulye adı adını transactionManager varsa

Sen <tx:annotation-driven/> etiketinde transaction-manager niteliğini atlayabilirsiniz. Eğer bağımlılık-inject başka bir adı vardır istiyorum PlatformTransactionManager fasulye, o zaman açıkça transaction-manager özellik kullanmak varsa sizindir işlem yöneticilerinin hiçbirinin transactionManager adlandırılır yana [...]

, belirttiğiniz gereken işlem yöneticisi, @Transactional ile işaretlenmiş yöntemler için kullanılmalıdır. Değiştirilen sorunuzu yanıtlamak için: UPT. Sen @Transactional notu üzerine kullanılacak işlem yöneticisi belirtebilirsiniz (bkz: @Transactional.value()):

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

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

Ancak, mevcut ayarlarınıza çeşitli sorunlar bkz:

  • farklı işlem yöneticileri ile iki kez <tx:annotation-driven/> tanımlar. Bu tür bir yapılandırmanın, işlem yöneticisi açıkça belirtilmeden geçerli

  • olduğunu sanmıyorum, hangisi kullanılmalıdır?

I çalışması gereken solüsyon bir kez <tx:annotation-driven transaction-manager="transactionManager1"/> tanımlar ve ikinci bir kullanımı, ilk yöneticisi ve @Transactional("transactionManager2") kullanımı @Transactional kullanmaktır. Ya da başka bir şekilde.

+0

tamam, soruma bir değişiklik yaptım, aslında karşılaştığım konu budur. – user1330526

+0

@ user1330526: güncellemelerime göz atın –

+0

Birden çok işlem yöneticisi için birden çok 'i tanımlamam gerekiyor, ancak Spring işlem yöneticileri göremiyor. –