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

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

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

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

如何开启声明式事务

注解方式:
		在配置类/启动类加上注解@EnableTransactionManagement
xml方式:
		1.添加标签 <aop:config>
		2.添加标签 <tx:advice>

使用声明式事务的注解 @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声明式事务创建过程,以及执行过程

以下就以注解的方式讲解
请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值