spring+mybatis多数据源分布式事务配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:aop="http://www.springframework.org/schema/aop"
  xmlns:tx="http://www.springframework.org/schema/tx"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-3.0.xsd
                        http://www.springframework.org/schema/tx
                        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
                        http://www.springframework.org/schema/aop
                        http://www.springframework.org/schema/aop/spring-aop.xsd">

  <context:component-scan base-package="im.qingtui.*">
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  </context:component-scan>

  <aop:aspectj-autoproxy/>


  <!-- 引入jdbc配置文件 -->
  <context:property-placeholder location="classpath:jdbc.properties" />

  <!-- DBCP连接池 -->
  <!-- 【重点】 A 数据源 -->
  <bean id="dataSourceQT" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close">
    <property name="uniqueResourceName" value="QT"/>
    <property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"/>
    <property name="xaProperties">
      <props>
        <prop key="url">${QT.url}</prop>
        <prop key="user">${QT.username}</prop>
        <prop key="password">${QT.password}</prop>
      </props>
    </property>
    <property name="minPoolSize" value="10" />
    <property name="maxPoolSize" value="100" />
    <property name="borrowConnectionTimeout" value="30" />
    <property name="testQuery" value="select 1" />
    <property name="maintenanceInterval" value="60" />
  </bean>
 <!-- 【重点】 B 数据源 -->
  <bean id="dataSourceOMP" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close">
    <property name="uniqueResourceName" value="OMP"/>
    <property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"/>
    <property name="xaProperties">
      <props>
        <prop key="url">${OMP.url}</prop>
        <prop key="user">${OMP.username}</prop>
        <prop key="password">${OMP.password}</prop>
      </props>
    </property>
    <property name="minPoolSize" value="10" />
    <property name="maxPoolSize" value="100" />
    <property name="borrowConnectionTimeout" value="30" />
    <property name="testQuery" value="select 1" />
    <property name="maintenanceInterval" value="60" />
  </bean>




  <!--轻推的数据库配置-->
  <bean id="SqlSessionFactoryQt"  class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSourceQT"/>
    <property name="mapperLocations" value="classpath*:mybatis/qt/*.xml"/>
  </bean>

  <bean id="scannerConfigurerQt" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="sqlSessionFactoryBeanName" value="SqlSessionFactoryQt"/>
    <property name="basePackage" value="im.qingtui.dao.qt"/>
  </bean>

  <!--运营的数据库配置-->
  <bean id="SqlSessionFactoryOmp" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSourceOMP"/>
    <property name="mapperLocations" value="classpath*:mybatis/omp/*.xml"/>
  </bean>

  <bean id="scannerConfigurerOmp" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="sqlSessionFactoryBeanName" value="SqlSessionFactoryOmp"/>
    <property name="basePackage" value="im.qingtui.dao.omp"/>
  </bean>

  <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
  <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
    <property name="transactionManager">
      <bean class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">
        <property name="forceShutdown" value="true"/>
      </bean>
    </property>
    <property name="userTransaction">
      <bean class="com.atomikos.icatch.jta.UserTransactionImp"/>
    </property>
  </bean>


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

</beans>

pom.xml部分配置

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>${org.mybatis.version}</version>
</dependency>
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis-spring</artifactId>
  <version>${org.mybatis.mybatis-spring.version}</version>
</dependency>
<!-- Mybatis -->
<dependency>
  <groupId>org.mybatis.generator</groupId>
  <artifactId>mybatis-generator-core</artifactId>
  <version>1.3.5</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-orm</artifactId>
  <version>${org.springframework.version}</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-tx</artifactId>
  <version>${org.springframework.version}</version>
</dependency>

<!-- mysql datasource-->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>${mysql-connector-java.version}</version>
</dependency>
 
 
<!-- 
分布式事务核心配置
-->
<!-- atomikos -->
<!-- atomikos -->
<dependency>
  <groupId>javax.transaction</groupId>
  <artifactId>jta</artifactId>
  <version>1.1</version>
</dependency>
<dependency>
  <groupId>com.atomikos</groupId>
  <artifactId>atomikos-util</artifactId>
  <version>${com.atomikos.version}</version>
</dependency>
<dependency>
  <groupId>com.atomikos</groupId>
  <artifactId>transactions</artifactId>
  <version>${com.atomikos.version}</version>
</dependency>
<dependency>
  <groupId>com.atomikos</groupId>
  <artifactId>transactions-api</artifactId>
  <version>${com.atomikos.version}</version>
</dependency>
<dependency>
  <groupId>com.atomikos</groupId>
  <artifactId>transactions-jdbc</artifactId>
  <version>${com.atomikos.version}</version>
</dependency>
<dependency>
  <groupId>com.atomikos</groupId>
  <artifactId>transactions-jta</artifactId>
  <version>${com.atomikos.version}</version>
</dependency>

猜你喜欢

转载自blog.csdn.net/qq_34468174/article/details/79290768