java分布式事务
2024-10-10 12:31:53
1.现有方案
a.atomikos
b.jotm
说明:spring3.0已将jotm的支持踢掉
2.使用atomikos时的pom.xml内容
<!-- 分布式事务支持-atomikos-begin -->
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>com.atomikos</groupId>
<artifactId>transactions</artifactId>
<version>3.9.1</version>
</dependency>
<dependency>
<groupId>com.atomikos</groupId>
<artifactId>transactions-api</artifactId>
<version>3.9.1</version>
</dependency>
<dependency>
<groupId>com.atomikos</groupId>
<artifactId>transactions-jta</artifactId>
<version>3.9.1</version>
</dependency>
<dependency>
<groupId>com.atomikos</groupId>
<artifactId>transactions-jdbc</artifactId>
<version>3.9.1</version>
</dependency>
<dependency>
<groupId>com.atomikos</groupId>
<artifactId>atomikos-util</artifactId>
<version>3.9.1</version>
</dependency>
<!-- 分布式事务支持-atomikos-end -->
3.使用atomikos时不能使用不支持jta的连接池如c3p0
4.spring配制如下:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:db.properties"/>
</bean>
<bean id="dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close" lazy-init="true">
<property name="uniqueResourceName" value="dataSource" />
<property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" />
<property name="xaProperties">
<props>
<prop key="url">${db.url}</prop>
<prop key="user">${db.username}</prop>
<prop key="password">${db.password}</prop>
</props>
</property>
<property name="poolSize" value="10"/>
<property name="maxPoolSize" value="100"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean> <bean id="userTransactionService" class="com.atomikos.icatch.config.UserTransactionServiceImp" init-method="init" destroy-method="shutdownForce">
<constructor-arg>
<props>
<prop key="com.atomikos.icatch.service">com.atomikos.icatch.standalone.UserTransactionServiceFactory</prop>
</props>
</constructor-arg>
</bean> <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close" depends-on="userTransactionService">
<property name="forceShutdown" value="false" />
</bean> <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp" depends-on="userTransactionService">
<property name="transactionTimeout" value="300" />
</bean> <bean id="jtaTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" depends-on="userTransactionService">
<property name="transactionManager" ref="atomikosTransactionManager" />
<property name="userTransaction" ref="atomikosUserTransaction" />
</bean> <tx:annotation-driven transaction-manager="jtaTransactionManager" />
5.service里采用标签来实现事务如下:
@Transactional(propagation=Propagation.REQUIRED,rollbackFor=Exception.class)
public void TestTransaction() throws Exception{
}
6.特别说明:
有人提出:使用spring的代理datasource来让spring管理事务,性能问题解决,提高8倍,见下面的连接
http://blog.sina.com.cn/s/blog_53765cf9010176zx.html
我还没有证实,找时间来看一下
最新文章
- python-基本数据类型
- 创建agsXMPP 自定义packet types
- hibernate的Criteria条件查询
- R----DT包介绍学习
- Installing Mp4box in centos 6
- SQL WHILE 循环中的游标 用例,SQL中实现循环操作
- (Problem 1)Multiples of 3 and 5
- hibernate 管理 Session(单独使用session,不spring)
- PCB信号集
- Java之反射--练习
- #pta循环作业
- Linux shell 脚本(一)
- 章节四、2-Switch语句
- 11.0-uC/OS-III就绪列表(优先级)
- NOIP模拟赛-2018.11.5
- OpenCV——距离变换与分水岭算法的(图像分割)
- MySQL数据库----安装
- hdu6446 网络赛 Tree and Permutation(树形dp求任意两点距离之和)题解
- 【转】TCP端口号记录
- Java对称加密算法