2009-12-25 23 views
11
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="data.emf" /> 
</bean> 

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


<bean id="transactionManager2" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="data.emf" /> 
</bean> 

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


En mi capa de servicio, puedo usar @Transactional(name="transactionManager2"); para identificar qué administrador de transacciones que utilizar si tengo múltiples administradores de transacciones?Spring múltiples fuentes de datos @Transactional

+2

¿Por qué crees que necesitas dos gerentes de transacciones? – duffymo

Respuesta

21

puede especificar qué gestor de TX para usar con @Transactional utilizando el value attribute: Un valor

clasificatorio para el transacción especificada.

puede usarse para determinar el gestor objetivo transacción, que coincide con el valor calificador (o el nombre de frijol) de un PlatformTransactionManager definición específica de frijol.

Por ejemplo:

@Transactional("txManager1"); 

Alternativamente, se puede utilizar la más explícita TransactionProxyFactoryBean, que le da un control más preciso sobre qué objetos obtiene aproximada por lo tx gestores. Esto todavía usa las anotaciones, pero no detecta automáticamente los beans, está configurado explícitamente en una base bean-by-bean.

Esto normalmente no es un problema, pero no es aconsejable tener varios administradores de transacciones a menos que tenga una muy buena razón para hacerlo. Si encuentra que necesita dos gerentes de tx, generalmente es mejor ver si puede arreglárselas con uno. Por ejemplo, si tiene dos orígenes de datos configurados en su servidor de aplicaciones, puede incorporar ambos en un solo JtaTransactionManager, en lugar de dos por separado JpaTransactionManager o DataSourceTransactionmanagers.

+0

por favor comente en mi post en http://stackoverflow.com/questions/1962509/which-sessionfactory-should-be-use-for-transactionmanager – cometta

+0

leo de http://stackoverflow.com/questions/1902997/multiple- database-with-springhibernatejpa, usa múltiples org.springframework.orm.jpa.JpaTransactionManager y será apuntado por @transactional ("nombre"). entonces esta forma esta bien? – cometta

+1

@skaffman, ¿cómo puedo asociar dos fuentes de datos al mismo administrador de transacciones si estoy usando DataSourceTransactionManager? – tsunade21

1

Más sobre la necesidad de tener más de un administrador de transacciones. Es posible que intente hacer transacciones anidadas o separadas en secuencia, luego puede usar diferentes configuraciones de propagación. Puede lograr eso con la configuración usando el administrador de transacción único, vea Transaction propagation.

Cuestiones relacionadas