@Transactional 事务调用与生效场景总结

2023-10-31

1.同一个类中 事务publicA掉非事务B   B抛异常  AB事务生效(具有传播性)

@Override
	@Transactional
	public void A() {
		User u = new User();
		u.setAccount("test");
		u.setName("1");
		u.setMobile("12345678912");
		u.setPassword("111");
		this.save(u);
		B();

	}
	public void B() {
		User u1 = new User();
		u1.setAccount("test1");
		u1.setName("2");
		u1.setMobile("12345678913");
		u1.setPassword("111");
		this.save(u1);
		//促发异常
		if(3/0==1)
			System.out.println("");
	}

2.同一个类中 事务A掉非事务B   A抛异常  AB事务生效

@Override
	@Transactional
	public void A() {
		User u = new User();
		u.setAccount("test");
		u.setName("1");
		u.setMobile("12345678912");
		u.setPassword("111");
		this.save(u);
		B();
		//促发异常
				if(3/0==1)
					System.out.println("");
	}
	public void B() {
		User u1 = new User();
		u1.setAccount("test1");
		u1.setName("2");
		u1.setMobile("12345678913");
		u1.setPassword("111");
		this.save(u1);
		
	}

3.同一个类中 事务A掉事务B   A抛异常  AB事务生效

@Override
	@Transactional
	public void A() {
		User u = new User();
		u.setAccount("test");
		u.setName("1");
		u.setMobile("12345678912");
		u.setPassword("111");
		this.save(u);
		B();
		//促发异常
		if(3/0==1)
			System.out.println("");
	}
	@Transactional
	public void B() {
		User u1 = new User();
		u1.setAccount("test1");
		u1.setName("2");
		u1.setMobile("12345678913");
		u1.setPassword("111");
		this.save(u1);
		
	}

4.同一个类中 事务A掉事务B   B抛异常  AB事务生效

@Override
	@Transactional
	public void A() {
		User u = new User();
		u.setAccount("test");
		u.setName("1");
		u.setMobile("12345678912");
		u.setPassword("111");
		this.save(u);
		B();
		
	}
	@Transactional
	public void B() {
		User u1 = new User();
		u1.setAccount("test1");
		u1.setName("2");
		u1.setMobile("12345678913");
		u1.setPassword("111");
		this.save(u1);
		//促发异常
		if(3/0==1)
			System.out.println("");
	}

5.同一个类中 非事务A掉事务B   B抛异常  A无事务 B事务不生效

@Override
	public void A() {
		User u = new User();
		u.setAccount("test");
		u.setName("1");
		u.setMobile("12345678912");
		u.setPassword("111");
		this.save(u);
		B();
		
	}
	@Transactional
	public void B() {
		User u1 = new User();
		u1.setAccount("test1");
		u1.setName("2");
		u1.setMobile("12345678913");
		u1.setPassword("111");
		this.save(u1);
		//促发异常
		if(3/0==1)
			System.out.println("");
	}

6.同一个类中 非事务A掉事务B(通过注入-相当于调用不同类中的B方法)   B抛异常  A无事务,B事务生效

@Override
	public void A() {
		User u = new User();
		u.setAccount("test");
		u.setName("1");
		u.setMobile("12345678912");
		u.setPassword("111");
		this.save(u);
		userService.B();
		
	}
	@Transactional
	@Override
	public void B() {
		User u1 = new User();
		u1.setAccount("test1");
		u1.setName("2");
		u1.setMobile("12345678913");
		u1.setPassword("111");
		this.save(u1);
		//促发异常
		if(3/0==1)
			System.out.println("");
	}

7.同一个类中 非事务A掉事务B(通过注入)   A抛异常  A无事务,B不促发事务,ab数据都会增加成功

@Override
	public void A() {
		User u = new User();
		u.setAccount("test");
		u.setName("1");
		u.setMobile("12345678912");
		u.setPassword("111");
		this.save(u);
		userService.B();
		//促发异常
				if(3/0==1)
					System.out.println("");
	}
	@Transactional
	@Override
	public void B() {
		User u1 = new User();
		u1.setAccount("test1");
		u1.setName("2");
		u1.setMobile("12345678913");
		u1.setPassword("111");
		this.save(u1);
		
	}

8.同一个类中 事务A掉非事务B(通过注入)A或B抛异常   AB事务生效 (事务传播性)

@Transactional
	@Override
	public void A() {
		User u = new User();
		u.setAccount("test");
		u.setName("1");
		u.setMobile("12345678912");
		u.setPassword("111");
		this.save(u);
		userService.B();
		//促发异常
				if(3/0==1)
					System.out.println("");
	}
	@Override
	public void B() {
		User u1 = new User();
		u1.setAccount("test1");
		u1.setName("2");
		u1.setMobile("12345678913");
		u1.setPassword("111");
		this.save(u1);
		
	}

总结:1.事务A掉B ,AB都有事务(事务传播性)2.非事务A掉事务B,A都无事务,B只有通过注入(AOP)方式调用的时候,B的事务才生效。3.private不能加事务 4.声明式事务如果要细化,可以拆分方法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@Transactional 事务调用与生效场景总结 的相关文章

随机推荐

  • 使用Python和OpenCV进行拍摄截图

    使用Python和OpenCV进行拍摄截图 1 效果图 2 原理 3 源码 参考 这篇博客将介绍如何使用OpenCV Python和PyAutoGui库拍摄截图 使用pyautogui 可以轻松地将屏幕截图直接捕捉到磁盘或内存 并且转换为O
  • 基于Transformers的自然语言处理入门【八】-Transformers解决序列标注任务

    基于Transformers的自然语言处理入门 八 Transformers解决序列标注任务 1 序列标注概念 2 常见的token级别分类任务 3 预处理数据 4 微调预训练模型 1 序列标注概念 序列标注 通常也可以看作是token级别
  • maven多model打包,launch4j打exe包,inno setup打安装包

    背景 最近公司要做java的本地化服务 需要在用户的终端部署安装java的服务 目前设计的进行http服务 从而提高云服务的容错性 性能 顺便进行有其他window的模块的连接 因为不是所有的本地业务模块都会打入本地服务 根据不同的需求 选
  • 思科c系列服务器cimc密码,UCS C系列服务器故障排除提示.PDF

    UCS C系列服务器故障排除提示 PDF UCS C系列服务器故障排除提示 目录 简介 先决条件 要求 使用的组件 网络图 规则 背景信息 C系列故障排除提示 获取对TAC的Showtech支持 显示系统事件日志事件 显示传感器读 显示CI
  • Laravel框架开发实践

    Laravel是一款优秀的PHP框架 它的流行不仅仅是因为它的优秀特性 而且它开创了一种全新的编程思路 帮助开发者更加高效地完成Web应用的开发 在学习Laravel开发过程中 我深刻体会到了Laravel框架的简洁 高效和灵活 下面是我的
  • 拉结尔6月21日服务器维护,拉结尔6月23日停服维护公告

    拉结尔手游将在6月23日进行短暂的维护更新哦 不清楚具体更新内容究竟是什么的小伙伴们 接下来就让我们一起来看一下吧 拉结尔6月23日停服维护公告 尊敬的探索者 拉结尔 于6月19日更新了全新周年庆版本 针对近日部分探索者反馈的关于新版本的问
  • Cocos2dx-OpenGL ES2.0教程:你的第一个立方体(5)

    在上篇文章中 我们介绍了VBO索引的使用 使用VBO索引可以有效地减少顶点个数 优化内存 提高程序效率 本教程将带领大家一起走进3D 绘制一个立方体 其实画立方体本质上和画三角形没什么区别 所有的模型最终都要转换为三角形 同时 本文还会介绍
  • Nginx构建反向代理缓存服务器

    防伪码 曾经沧海难为水 除却巫山不是云 代理服务可简单的分为正向代理和反向代理 正向代理 用于代理内部网络对Internet的连接请求 如 NAT 客户端指定代理服务器 并将本来要直接发送给目标Web服务器的HTTP请求先发送到代理服务器上
  • springboot2.0整合logback日志(详细)-禁止logback内部日志

    本文转载自作者 70KG 出处 https www cnblogs com zhangjianbing p 8992897 html 一 近期自己的项目想要一个记录日志的功能 而springboot本身就内置了日志功能 然而想要输入想要的日
  • Spring Boot 中的多线程事务处理太繁琐?一个自定义注解直接搞定!

    前言 我们开发的时候常常会遇到多线程事务的问题 以为添加了 Transactional注解就行了 其实你加了注解之后会发现事务失效 原因 数据库连接spring是放在threadLocal里面 多线程场景下 拿到的数据库连接是不一样的 即是
  • Android项目连接手机

    1 下载和环境配置 首先要在android上面下载Android WiFi ADB 点击File setting Plugins 搜索Android WiFi ADB下载安装然后关掉Android重启打开 然后需要配置SDK里面ADB的环境
  • 电气间隙和爬电距离的测量方法

    目录 电气间隙和爬电距离的测量方法 电气间隙Clearance 爬电距离creepage 一 名词解释 二 从 GB4943 2001 中 2 10 条款定义理解 具体测量步骤步骤如下 一 电气间隙的测量步骤 二 确定爬电距离步骤 三 从
  • Spring Boot之定时任务

    定时任务是我们在项目中经常遇到的场景 也是进场需要使用的场景 比如说订单 没10分钟需要取消没有未支付的订单等等 Timer Timer是 JDK 自带的定时执行的工具类 无需任何的处理就可以直接使用 使用起来特别的方便 但是使用该定时任务
  • 如何保护数据安全?企业该从部署SSL证书开始

    数字化时代 大数据开始蔓延到各行各业 影响着生活的方方面面 在犹如 皇帝穿新衣 般透明的大数据时代 数据泄露无孔不入 存在问题层出不穷 未知的漏洞隐患 安全边界的模糊 新的网络攻击手段 个人隐私的无处藏身等一系列问题不断出现 因此 如何保护
  • linux.zip文件怎么解压,linux怎么解压zip文件

    ZIP是最广泛使用的归档文件格式 支持无损数据压缩 ZIP文件是包含一个或多个压缩文件或目录的数据容器 在此文中将向您展示如何使用unzip命令通过命令行解压缩Linux系统中的文件 Unzip命令 可帮助您列出 测试和提取压缩的ZIP归档
  • 函数命名技巧

    以动词开头 函数总是做些什么 所以当然要以动词开头 尽量不要以 do 开头 do 并不能给我们提供任何函数的信息 相比之下 search compute handle 之类的动词暗示着函数大概做了什么 合理的使用 get 作为函数名字的开头
  • 2019 5/13 Linux基础指令1

    LINUX基础指令1 换执行等级 init Linux共有七种执行等级 run level 0 关机 run level 3 纯文本模式 run level 5 含有图形接口模式 run level 6 重新启动 重启reboot 键盘指令
  • 最大化最小值问题(二分法)

    二分中非常典型的应用就是 最小化最大值问题 和 最大化最小值问题 本篇结合三道例题来说明最小化最大值问题 最大化最小值 会给你一些可取的数据范围 这个范围有时候需要自己发现 不过一般来说都很明显 然后在这些范围中找到符合要求的数值 通过函数
  • PyTorch、TensorFlow和Jax构建神经网络模型的标准化流程

    文章目录 开始之前 一 PyTorch 1 1 PyTorch 版本1 x阶段 二 TensorFlow 2 1 TensorFlow 版本 1 x 阶段 2 2 TensorFlow 版本 2 x 阶段 三 Jax 3 1 Jax 版本
  • @Transactional 事务调用与生效场景总结

    1 同一个类中 事务publicA掉非事务B B抛异常 AB事务生效 具有传播性 Override Transactional public void A User u new User u setAccount test u setNam