Spring Atomikos分布式事务

本文介绍如何在Java应用中使用Atomikos实现分布式事务管理,包括选择合适的数据库版本、配置Atomikos数据源、引入相关jar包、设置事务管理器及属性,以及与MyBatis框架集成的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 分布式事务必须使用的数据库支持 并且提供 XA 连接驱动 如 mysql 的5.0+版本驱动中就有 com.mysql.jdbc.jdbc2.optional.MysqlXAConnection  等 这些对 XA 分布事务支持的连接 ,所以理所当然我们要使用XA事务就必须使用这种XA连接 , mysql5.1 是支持分布事务的 ,mysql驱动需要5.0+ 
Atomikos分两个:一个是开源的TransactionEssentials,一个是商业的ExtremeTransactions。
TransactionEssentials的主要特征:JTA/XA 事务管理 -- 提供事务管理和连接池不需要应用服务器 -- TransactionEssentials可以在任何Java EE应用服务器中运行,也就是不依赖于任何应用服务器开源 -- TransactionEssentials是遵守Apache版本2许可的开源软件专注于JDBC/JMS -- 支持所有XA资源,但是资源池和消息监听是专供JDBC和JMS的与Spring 和 Hibernate 集成 -- 提供了描述如何与Spring和Hibernate集成的文档 
AtomikosTransactionsEssentials 当前版本是3.8.0下载地址:http://www.atomikos.com/Main/InstallingTransactionsEssentials 
Atomikos 所需jar包: transactions-jdbc.jar   transactions-jta.jar   transactions.jar   atomikos-util.jar   transactions-api.jar 
用maven要简单一点,只需要加入两个依赖: 
<dependency>
<groupId>com.atomikos</groupId>
<artifactId>transactions-jdbc</artifactId>
<version>3.8.0</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency>
 配置数据源 
<bean id="dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close">
<property name="uniqueResourceName" value="ds1"/>
<property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"/>
<property name="xaProperties">
<props>
<prop key="url">jdbc:mysql://localhost/test</prop>
<prop key="user">test</prop>
<prop key="password">test</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="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:resources/mybatisConfig.xml" />
    </bean>
配置jta事务管理 
<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>  
    <property name="allowCustomIsolationLevels" value="true" />
</bean>
<tx:annotation-driven/>  
<!-- 定义通知拦截方法 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- <tx:method name="*" propagation="SUPPORTS" read-only="true"rollback-for="Exception" /> -->
<tx:method name="save*" propagation="REQUIRED" rollback-for="Exception" />
<tx:method name="update*" propagation="REQUIRED" rollback-for="Exception" />
<tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception" />
<tx:method name="add*" propagation="REQUIRED" rollback-for="Exception" />
</tx:attributes>
</tx:advice>
配置jta.properties 
com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory
# Set the default timeout (in milliseconds) for local transactions
#
com.atomikos.icatch.default_jta_timeout = 18000
 
# Set the max timeout (in milliseconds) for local transactions
#
com.atomikos.icatch.max_timeout = 300000

转载于:https://www.cnblogs.com/langke93/archive/2012/11/20/2778919.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值