2012-09-26 35 views
5

Tengo dos administrador de transacciones se define en dos archivos XML muelle separado, y dos de ellos cargado en el contexto de primaveraedición de primavera gestor de transacciones múltiples

Archivo Una

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

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

Archivo Dos

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

Si no indiqué ningún calificador para el servicio a continuación, qué primavera de administrador de transacción van a utilizar.

public class TransactionalService { 

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

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

Respuesta

13

Salida 11.5.6 Using @Transactional de la documentación oficial:

se puede omitir el atributo transaction-manager en la etiqueta <tx:annotation-driven/> si el nombre del frijol PlatformTransactionManager que desea conectar en cuenta el nombre transactionManager. Si el grano de PlatformTransactionManager que desea a la dependencia a inyectar tiene cualquier otro nombre, entonces usted tiene que utilizar el atributo transaction-manager explícitamente [...]

Dado que ninguno de los administradores de transacciones suyo se nombran transactionManager, debe especificar qué El administrador de transacciones se debe usar para los métodos marcados con @Transactional.


ACTUALIZACIÓN: para responder a su pregunta modificada. Puede especificar qué administrador de transacciones para usar en @Transactional anotación (ver: @Transactional.value()):

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

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

Sin embargo veo varios problemas con la configuración actual:

  • se define <tx:annotation-driven/> dos veces con diferentes gestores de transacciones. No creo que dicha configuración sea válida

  • sin proporcionar el administrador de transacciones explícitamente, ¿cuál debería usarse?

La solución creo que debe trabajar es definir <tx:annotation-driven transaction-manager="transactionManager1"/> una vez y utilizar @Transactional usar primero gerente y @Transactional("transactionManager2") utilizar la segunda. O al revés.

+0

bien, hice algunas modificaciones a mi pregunta, en realidad este es el problema al que me estoy enfrentando. – user1330526

+0

@ user1330526: vea mis actualizaciones –

+0

Necesito definir múltiples '' para múltiples gestores de transacciones, de lo contrario, Spring no puede ver mis gestores de transacciones. –

Cuestiones relacionadas