栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring事务失效问题解析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring事务失效问题解析

事务注解失效
@Transactional
public int insert(Test test) {
    testMapper.insert(test);
    insert2(test);
    return 1;
}

@Transactional(propagation = Propagation.NEVER)
public int insert2(Test test){
    return testMapper.insert(test);
}

上述代码中,我们期望的结果是执行到insert2方法时会抛出已经存在事务的错误,然而实际上是什么错也没有抛出,这个两个insert操作都成功执行了。

分析:

其实事务也是利用了apo的原理

  1. 方法执行时,其实是执行了事务代理对象的方法
  2. 事务代理对象的方法中首先会开启事务,获取数据源连接
  3. 然后再执行代理对象中的target也就是普通对象的方法,这里就是执行真正我们的业务
  4. 然后事务代理对象会判断上述执行过程中有没有出现异常,进而判断是commit还是rollback

原理流程伪代码

class TestServiceProxy extends TestService {

	TestService target;

	public void insert(){

		//1.开启事务
		//2.从数据源连接中获取一个连接connect
		
		//执行真正的业务
		//target就是真正的普通对象TestService
		target.insert

		//判断是否出现异常
		//commit或者rollback
	}
}

在上述案例中,当调用到insert(Test test)这时调用到此方法的对象已经是真正的普通对象了。
所以在执行insert2(test);时仍是普通对象,也就直接执行insert2(test);。所以不会出现抛出已存在事务的异常。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1040152.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号