SpringBoot启动过程深度解析——Spring声明式事务@Transactional启动过程与事务执行过程解析
发布日期:2023-09-20 01:39:53 浏览次数:1 分类:技术文章

本文共 1149 字,大约阅读时间需要 3 分钟。

SpringBoot启动过程深度解析——Spring声明式事务@Transactional启动过程与事务执行过程解析

Spring声明式事务简单的概述:

在方法的外部添加注解或者直接在配置文件中定义,将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理。	spring的AOP恰好可以完成此功能:事务管理代码的固定模式作为一种横切关注点,通过AOP方法模块化,进而实现声明式事务。

如何开启声明式事务

注解方式:		在配置类/启动类加上注解@EnableTransactionManagementxml方式:		1.添加标签 
2.添加标签

使用声明式事务的注解 @Transactional

​isolation:设置事务的隔离级别(7种)​propagation:事务的传播行为​noRollbackFor:哪些异常不回滚		注意:运行时异常默认回滚,编译时异常默认不回滚​noRollbackForClassName:哪些异常类不回滚​rollbackFor:哪些异常事务需要回滚​rollbackForClassName:填写的参数是全类名​readOnly:设置事务是否为只读事务		​如果你一次执行多条查询语句,例如统计查询,报表查询,多条查询SQL必须保证整体的读一致性,此时应该启用事务支持。		否则,在前条SQL查询之后,后条SQL查询之前,数据被其他用户改变,则该次整体的统计查询将会出现读数据不一致的状态。		​对于只读查询,可以指定事务类型为readonly,即只读事务。由于只读事务不存在数据的修改,因此数据库将会为只读事务提供一些优化手段​timeout:事务超出指定执行时长后自动终止并回滚,单位是秒

Spring给出了7种事务隔离级别

【怎么样都不要事务的】			NEVER(强制):以非事务方式运行,如果当前存在事务,则抛出异常。			NOT_SUPPORTED:以非事务方式运行,如果当前存在事务就挂起,然后以非实物执行。【可有可无的】			SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式运行。			【一定会有事务的】			REQUIRES_NEW:无论有没有都新建事务;如果原来有,就将原来的挂起,使用新建的事务。			NESTED  :如果没有,就新建一个事务;如果有,就在当前事务中嵌套内部事务。			REQUIRED (默认) :如果没有,就新建一个事务;如果有,就加入当前事务。			MANDATORY (强制有事务) :如果没有,就抛出异常;如果有,就使用当前事务。

使用嵌套事务时,需要注意的组合场景

请添加图片描述

Spring声明式事务创建过程,以及执行过程

以下就以注解的方式讲解

请添加图片描述

转载地址:https://blog.csdn.net/weixin_39072857/article/details/130120600 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:SpringBoot启动过程深度解析——WebApplicationType
下一篇:SpringBoot启动过程深度解析——SpringApplicationEvent事件发布-启动过程解析&常见实现类

发表评论

最新留言

关注你微信了!
[***.104.42.241]2023年09月05日 22时41分03秒