首页 > 代码库 > Spring3.x中的分布式事务配置

Spring3.x中的分布式事务配置

因为用Spring3.x已经有一段时间了,原来的事务配置基本上是基于同一数据源(可以用一个连接,在数据操作上指定多个数据库的操作,也能够进行回滚,事务的提交,基本上实现了分布式的事务处理),今天特地用atomikos进行了事务配置,进行了简单的测试,因为atomikos这个配置数据源时,自带了连接池,对于连接池的性能没有进行专门的测试,把原来的c3p0的事务配置去掉了,这个有待明天进行一次测试。

所依赖Java开源包,用maven自动下载:

我的配置

 <properties>
  <atomikos-version>3.9.3</atomikos-version>
</properties>

<dependency>
  <groupId>javax.transaction</groupId>
  <artifactId>jta</artifactId>
  <version>1.1</version>
 </dependency>
    
    <dependency>
  <groupId>com.atomikos</groupId>
  <artifactId>transactions-jdbc</artifactId>
  <version>${atomikos-version}</version>
 </dependency>
 <dependency>
  <groupId>com.atomikos</groupId>
  <artifactId>transactions-jms</artifactId>
  <version>${atomikos-version}</version>
 </dependency>
   

现在把atomikos+spring jdbc的配置写上,以供以后的项目中参考

 <!-- 数据库cb_base -->

 <!-- 数据库cb_base -->
 <bean class="com.atomikos.jdbc.AtomikosDataSourceBean"
  init-method="init" destroy-method="close" id="dataSourceBase">
  <!-- Set unique name for this DataSource --> 
         <property name="uniqueResourceName"><value>mysql/${BasesDB.DBName}</value></property>
         <!-- Set XADatasource class name--> 
         <property name="xaDataSourceClassName" value=http://www.mamicode.com/"com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" />
         <property name="xaProperties">
             <props>
                 <prop key="user">${jdbc.basesUser}</prop>
                 <prop key="password">${jdbc.basesPassword}</prop>
                 <prop key="url">${jdbc.basesJdbcUrl}</prop>
             </props>
         </property>
         <!-- set properties for datasource connection pool --> 
         <property name="poolSize" value=http://www.mamicode.com/"${jdbc.minPoolSize}" />
         <!-- 管理 Connection 被占用的时间 -->
         <!-- 如果不设置这个值,Atomikos使用默认的300秒(即5分钟),那么在处理大批量数据读取的时候,一旦超过5分钟,就会抛出类似 Resultset is close 的错误 -->
         <property name="reapTimeout"><value>20000</value></property> 
 </bean>



 <!-- 数据库cb_files -->
 <bean class="com.atomikos.jdbc.AtomikosDataSourceBean"
  init-method="init" destroy-method="close" id="dataSourceFile">
  <property name="uniqueResourceName"><value>mysql/${FilesDB.DBName}</value></property>
         <!-- Set XADatasource class name--> 
         <property name="xaDataSourceClassName" value=http://www.mamicode.com/"com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" />
         <property name="xaProperties">
             <props>
                 <prop key="user">${jdbc.filesUser}</prop>
                 <prop key="password">${jdbc.filesPassword}</prop>
                 <prop key="url">${jdbc.filesJdbcUrl}</prop>
             </props>
         </property>
         <!-- set properties for datasource connection pool --> 
         <property name="poolSize" value=http://www.mamicode.com/"${jdbc.minPoolSize}" />
         <!-- 管理 Connection 被占用的时间 -->
         <!-- 如果不设置这个值,Atomikos使用默认的300秒(即5分钟),那么在处理大批量数据读取的时候,一旦超过5分钟,就会抛出类似 Resultset is close 的错误 -->
         <property name="reapTimeout"><value>20000</value></property> 
 </bean>
 
 <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
               init-method="init" destroy-method="close">
          <property name="forceShutdown" value=http://www.mamicode.com/"true"/>
    </bean>

    <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
          <property name="transactionTimeout" value=http://www.mamicode.com/"300"/>
    </bean>
    
    
 <!-- JTA事务管理器 --> 
 <bean id="jtaTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">    
   <property name="userTransaction" ref="atomikosUserTransaction" />
   <property name="transactionManager" ref="atomikosTransactionManager" />
   <property name="allowCustomIsolationLevels" value=http://www.mamicode.com/"true"/>
 </bean> 
 
 <tx:annotation-driven transaction-manager="jtaTransactionManager" order="100" />
 
 
 <!-- 设置jdbcTemplate -->
 <bean id="basesJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource">
      <ref bean="dataSourceBase" />
    </property>
 </bean> 
 
 <bean id="filesJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource">
      <ref bean="dataSourceFile" />
    </property>
 </bean> 


其它就是基本的jdbc配置了

<!-- 数据库操作基类 -->  
 
 <bean id="basesBaseDAO" class="com.xxxx.bases.persistent.dao.impl.VDAOImpl" >
  <description>基础DAO接口</description>
  <property name="jdbcTemplate" ref="basesJdbcTemplate"/>
  <property name="dbName" value=http://www.mamicode.com/"${BasesDB.DBName}"/>
 </bean>
 
 <bean id="filesBaseDAO" class="com.xxxx.files.persistent.dao.impl.VDAOImpl" >
  <description>基础DAO接口</description>
  <property name="jdbcTemplate" ref="filesJdbcTemplate">
  </property>
  <property name="dbName" value=http://www.mamicode.com/"${FilesDB.DBName}">
  </property>
 </bean>




Spring3.x中的分布式事务配置