当前位置: 首页 > news >正文

秋招Day17 - Spring - 事务

Spring事务的种类

编程式事务和声明式事务

介绍一下编程式事务管理?

通过编程的方式显式控制事务的开始、提交和回滚,一般使用TransactionTemplate的execute方法

介绍一下声明式事务管理?

基于AOP,通过调用代理对象拦截目标方法,在方法执行前插入事务开始的横切逻辑,在方法执行后根据执行情况来选择提交还是回滚。不需要在业务逻辑中显式的编写事务相关的代码,Spring 推荐通过 @Transactional 注解的方式来实现声明式事务管理,也是日常开发中最常用的。

由于Spring AOP连接点类型的限制,最细粒度只能是方法级别。

Spring的事务传播机制?

事务传播机制定义了一个事务方法被另一个事务方法调用时的事务行为,这些行为定义了事务边界和事务上下文如何在调用链中传播。

默认是Required,也就是说如果当前存在事务,则加入当前事务,如果不存在,则新建事务。

事务传播机制是通过ThreadLocal实现的,也就是说,如果调用事务的时候使用了一个新线程,则事务传播机制失效

声明式事务的实现原理了解吗?

基于AOP和代理机制。

首先是在Bean的初始化阶段创建目标类的代理对象

Spring容器在初始化单例Bean的时候,会遍历所有的BeanPostProcessor实现类,并执行其 postProcessAfterInitialization 方法检查这个Bean的类或方法上有没有@Transactional,如果有的话,Spring就知道这个Bean需要事务增强,会为其通过JDK动态代理或者CGLIB代理生成一个代理对象,实际注入这个Bean的时候注入的是代理对象。

然后通过代理对象拦截需要被事务增强的目标方法,转发到事务拦截器的invoke方法中,这个方法中会插入事务开启、提交或回滚的横切逻辑,是一种环绕增强

声明式事务在哪些情况下会失效?

如果 @Transactional 注解应用在非 public 修饰的方法上,Transactional 将会失效。

@Transactional 注解中的事务传播机制属性配置错误,默认是Required

@Transactional 注解中的rollbackFor属性配置错误,默认是unchecked异常和Error下回滚

同一个类中调用事务方法,因为只有在声明@Transactional 注解的类外调用事务方法才能生成代理对象

一个事务方法调用另一个事务方法时,用try-catch捕获了另一个事务方法的异常

http://www.lryc.cn/news/596620.html

相关文章:

  • 使用 Ansys Fluent 软件参数化工作流程对搅拌罐中的稳态涡流进行仿真
  • 力扣 78.子集
  • ros0基础-day17
  • 电商项目_秒杀_架构及核心
  • Linux文件系统深入理解
  • 交叉编译opencv(Cpp)于arm64架构开发板上
  • 决策规划内容整理
  • 三轴云台之图像处理算法篇
  • 跨越语言壁垒!ZKmall开源商城多语言架构如何支撑电商全球化布局
  • Ext4文件系统全景解析
  • C++基础学习——文件操作详解
  • wangEditor5添加键盘事件/实现定时保存功能
  • 单张显卡运行多个vllm模型
  • 进程优先级切换调度-进程概念(6)
  • 【C++】继承和多态扩展学习
  • PyQt5在Pycharm上的环境搭建 -- Qt Designer + Pyuic + Pyrcc组合,大幅提升GUI开发效率
  • Qt多语言支持初步探索
  • 按键精灵脚本:自动化利刃的双面性 - 从技术原理到深度实践与反思
  • Web3面试题
  • 拥抱区块链红利:机遇无限,风险暗涌
  • 期权分红怎么分的?
  • UNet改进(24):注意力机制-从基础原理到高级融合策略
  • Atcoder Beginner Contest 415 D题
  • 算法笔记之堆排序
  • 2023CCPC秦皇岛 F. Mystery of Prime(线性DP)
  • Python通关秘籍(四)数据结构——列表
  • iView Table组件二次封装
  • Elasticsearch服务器开发(第2版) - 读书笔记 第一章 Elasticsearch集群入门
  • 【uboot/kernel1】启动流程,环境变量,内存,initramfs
  • 【数学建模】基础知识