项目中遇到多数据源问题,
对于每个数据源需要单独完成事务控制,
这里记录下具体实现方法
在spring配置文件中
定义两个数据源
<!-- 数据源定义(spring-jndi) -->
<jee:jndi-lookup id="datasourceX" jndi-name="jdbc/x" />
<!-- 数据源定义(spring-jndi) -->
<jee:jndi-lookup id="datasourceY" jndi-name="jdbc/y" />
定义了两个事务管理器:transactionManagerX,transactionManagerY,分管两个数据源datasourceX和datasourceY.
<bean id="transactionManagerX" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="datasourceX" />
</bean>
<bean id="transactionManagerY" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="datasourceY" />
</bean>
<!-- 使用annotation定义事务驱动 -->
<tx:annotation-driven transaction-manager="transactionManagerX" />
<tx:annotation-driven transaction-manager="transactionManagerY" />
在使用时使用如下方式,区分事务是对于哪一个数据源做操作:
@Transactional(value = "transactionManagerX", rollbackFor = Exception.class)
@Transactional(value = "transactionManagerY", rollbackFor = Exception.class)
另外做下记录,如果需要在多数据源之间完成事务性操作,需要使用Java/JTA 事务处理工具,例如:Atomikos!