没有测试过,以前代码记录
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionException;
import org.springframework.transaction.TransactionStatus;
@SuppressWarnings("unchecked")
public class MultiTransactionManager implements PlatformTransactionManager {
private List transManagerList;
public void commit(TransactionStatus ts) throws TransactionException {
TmTsHolder tmts;
List tmtsList = ((MultiTranscationObject) ts).tmtsList();
for (Iterator iter = tmtsList.iterator(); iter.hasNext();) {
tmts = (TmTsHolder) iter.next();
if (tmts.transactionStatus.isRollbackOnly()) {
rollback(ts);
return;
}
}
for (Iterator iter = tmtsList.iterator(); iter.hasNext();) {
tmts = (TmTsHolder) iter.next();
tmts.transactionManager.commit(tmts.transactionStatus);
}
}
public TransactionStatus getTransaction(TransactionDefinition def)
throws TransactionException {
MultiTranscationObject mo = new MultiTranscationObject();
for (Iterator it = this.transManagerList.iterator(); it.hasNext();) {
PlatformTransactionManager tm = (PlatformTransactionManager) it.next();
mo.addTranscationObject(tm, tm.getTransaction(def));
}
return mo;
}
public void rollback(TransactionStatus ts) throws TransactionException {
List tmtsList = ((MultiTranscationObject) ts).tmtsList();
for (Iterator iter = tmtsList.iterator(); iter.hasNext();) {
TmTsHolder tmts = (TmTsHolder) iter.next();
tmts.transactionManager.rollback(tmts.transactionStatus);
}
}
public void setTransManagerList(List transManagerList) {
this.transManagerList = transManagerList;
}
private static class TsSpHolder {
Object savePoint;
TransactionStatus transactionStatus;
TsSpHolder(TransactionStatus ts, Object savePoint) {
this.transactionStatus = ts;
this.savePoint = savePoint;
}
}
private static class TmTsHolder {
PlatformTransactionManager transactionManager;
TransactionStatus transactionStatus;
TmTsHolder(PlatformTransactionManager tm, TransactionStatus ts) {
this.transactionManager = tm;
this.transactionStatus = ts;
}
}
private static class MultiTranscationObject implements TransactionStatus {
private boolean rollbackOnly;
private List tmtsList;
private MultiTranscationObject() {
this.rollbackOnly = false;
this.tmtsList = new ArrayList();
}
void addTranscationObject(PlatformTransactionManager tm,
TransactionStatus ts) {
this.tmtsList.add(new MultiTransactionManager.TmTsHolder(tm, ts));
}
public Object createSavepoint() throws TransactionException {
List tsspList = new ArrayList();
for (Iterator it = this.tmtsList.iterator(); it.hasNext();) {
TransactionStatus ts = ((MultiTransactionManager.TmTsHolder) it
.next()).transactionStatus;
tsspList.add(new MultiTransactionManager.TsSpHolder(ts, ts
.createSavepoint()));
}
return tsspList;
}
public boolean isNewTransaction() {
for (Iterator it = this.tmtsList.iterator(); it.hasNext();) {
TransactionStatus ts = (TransactionStatus) it.next();
if (!(ts.isNewTransaction()))
return false;
}
return true;
}
public boolean isCompleted() {
return true;
}
public boolean hasSavepoint() {
return true;
}
public boolean isRollbackOnly() {
return this.rollbackOnly;
}
public void releaseSavepoint(Object savePoint)
throws TransactionException {
List tsspList = (List) savePoint;
for (Iterator it = tsspList.iterator(); it.hasNext();) {
MultiTransactionManager.TsSpHolder tssp = (MultiTransactionManager.TsSpHolder) it
.next();
tssp.transactionStatus.releaseSavepoint(tssp.savePoint);
}
}
public void rollbackToSavepoint(Object savePoint)
throws TransactionException {
List tsspList = (List) savePoint;
for (Iterator it = tsspList.iterator(); it.hasNext();) {
MultiTransactionManager.TsSpHolder tssp = (MultiTransactionManager.TsSpHolder) it
.next();
tssp.transactionStatus.rollbackToSavepoint(tssp.savePoint);
}
}
public void setRollbackOnly() {
for (Iterator it = this.tmtsList.iterator(); it.hasNext();) {
MultiTransactionManager.TmTsHolder tmts = (MultiTransactionManager.TmTsHolder) it
.next();
tmts.transactionStatus.setRollbackOnly();
}
this.rollbackOnly = true;
}
public List tmtsList() {
return this.tmtsList;
}
}
}
分享到:
相关推荐
1. 基于Aspectj实现动态数据源...6. 实现事务内切换数据源(支持原生Spring声明式事务哟,仅此一家),并支持多数据源事务回滚(有了它除了跨服务的事务你需要考虑分布式事务,其他都不需要,极大的减少了系统的复杂程度)
这份文档以例子的形式讲诉了Spring对事务支持的知识,希望可以帮助学习的人!
并且,Spring的事务框架与Spring提供的数据访问支持可以紧密结合,更是让我们在 事务管理与数据访问之间游刃有余。而最主要的是,结合Spring的AOP框架,Spring的事务框架为我们 带来了原来只有CMT才有的声明式事务...
通过代码解析spring传播特性,包括 1、Propagation.REQUIRED 方法被调用时自动开启事务,在事务范围内使用则使用同一个事务,否则开启新事务。 2、Propagation.REQUIRES_NEW 无论何时自身都会开启事务 3、...
Spring框架的声明式事务管理是Java开发中的核心特性,它为高效且可靠的数据操作提供了强大支持。Spring通过@Transactional注解以及底层的AOP和代理机制实现了声明式事务。这个机制允许开发者通过简单的注解就能控制...
Spring Data JPA系列4——Spring声明式事务处理与多数据源支持.doc
springcloud整合分布式事务框架TX-LCN
本文系统的介绍了Spring中的四种声明式事务的配置。可应用于实践项目中。
02.Spring支持的常用数据库事务传播属性和事务隔离级别
1.掌握Myeclipse的使用。 2.掌握spring框架和hibernate框架的使用。 3. 掌握整合spring和hibernate的持久化操作...2.添加spring支持、hibernate支持 3.配置WEB-INF/applicationContext.xml提供基于AOP的声明式事务
1.9 Spring对事务管理的支持的发展历程(基础篇) 1.10 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。 1.11 在spring中获取代理对象代理的目标对象工具类 1.12 如何为...
Spring对事务管理提供完整的支持.与hibernate的集成
实现系统对多数据源的操作。 实现系统对多数据源的分布式事务管理,包括事务的提交和回滚。
Spring事务类型详解: PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_...
52 MySQL是如何支持4种事务隔离级别的?Spring事务注解是如何设置的?l.pdf
本用例基于 Spring Boot + Druid + Mybatis 配置多数据源,并采用 JTA 实现分布式事务。
第8章 Spring中的事务管理 第9章 Spring对ORM的支持 第10章 Spring MVC框架 第11章 整合Spring与其他Web框架 第12章 Spring对测试的支持 第三部分 高级主题 第13章 Spring ...
基于student表,实现对表的增、删、改、删,并且支持事务控制,事务控制是基于自定义的异常拦截
第8章 Spring中的事务管理 第9章 Spring对ORM的支持 第10章 Spring MVC框架 第11章 整合Spring与其他Web框架 第12章 Spring对测试的支持 第三部分 高级主题 第13章 Spring ...
08_SSM面试题_Spring支持的常用数据库事务传播属性和...