Spring中propagation事务配置

1. 简述

在声明式的事务处理中,要配置一个切面,其中就用到了propagation,表示打算对这些方法怎么使用事务,是用还是不用,其中propagation有七种配置,REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER、NESTED。默认是REQUIRED。

2.最常使用的配置

REQUIRED:对数据库进行增删改操作时,一般都使用这个配置
SUPPORTS:对数据库进行查询操作时,可以使用这个配置

3. Spring中七种Propagation类的事务属性详解:

REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

如果已经存在事务,则加入这个事务,形成一个整体
也就是说,如果应用在当前父方法调用子方法的场景,相当于总父方法开始开启事务,在子方法最后结束前,如果中间有任何一个环节抛出异常,则全部回滚,也就是说会加入到同一个事务控制

相当于在哪个方法上添加@Transcational(propagation=Propagation.REQUIRED)
就在该方法的外围添加try-catch

所有会影响数据库的操作(增删改),基本上都使用 REQUIRED

SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。

一般不用写,如果要写的,那么查询方法用 SUPPORTS
只用在调用方有事务时,才会加入事务

MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。

当子方法使用@Transcational(propagation=Propagation. MANDATORY)
而调用该子方法的父方法没有添加事务控制时,会抛出异常

REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。

在父子方法调用的状态中比较明显
如果父方法抛出异常,不影响子方法运行
子方法运行的时候,会将父方法的事务挂起,自己以一个新的事务的方式去运行

父方法

	@Transactional(propagation = Propagation.REQUIRED)
	@GetMapping
	public void propagation(){
   
		propagationService.addSubStu();
		int x=1/0;
		propagationService.addParentStu();
	}

子方法

	@Override
	public 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值