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

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

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

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

如何开启声明式事务

注解方式:
		在配置类/启动类加上注解@EnableTransactionManagement
xml方式:
		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 (强制有事务) :如果没有,就抛出异常;如果有,就使用当前事务。

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

SpringBoot启动过程深度解析——Spring声明式事务@Transactional启动过程与事务执行过程解析_第1张图片

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

以下就以注解的方式讲解
SpringBoot启动过程深度解析——Spring声明式事务@Transactional启动过程与事务执行过程解析_第2张图片

你可能感兴趣的:(spring,spring,boot,java,后端,架构)