首页 > 代码库 > 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中的分布式事务配置