首页 > 技术文章 > spring多数据源事务配置

widget90 2017-12-10 15:47 原文

项目中遇到多数据源问题,

对于每个数据源需要单独完成事务控制,

这里记录下具体实现方法

 

在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!

 

推荐阅读