码迷,mamicode.com
首页 > 其他好文 > 详细

事务的传播行为解析(Transaction propagation: Required,RequiresNew,Nested)

时间:2020-06-09 20:36:54      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:color   fan   size   ext   spi   trigger   margin   padding   outer   

propagation

1.Required

技术图片

 

//deviceService外部事务Propagation.required
@Transactional(rollbackFor = Throwable.class)
public void updateDeviceStatus(String string) {
	deviceMapper.updateDeviceStatus("20b5273ebeb84229a8c1e0d8b535974f", string);
	try {
		nestService.updateDeviceStatus("869aab5ad135491c95b90772d864034a", string);
	} catch (Exception e) {
		log.error("error", e);
	}
}

  

//nestService内部事务
@Transactional(propagation = Propagation.REQUIRED)
public void updateDeviceStatus(String s, String string) {
	deviceMapper.updateDeviceStatus(s, string);
	int i = 1 / 0;
}

  

1.1,外部方法有事务注解 且 传播行为是propagation.required ,也有事务注解 且 传播行为是propagation.required。当内部方法或外部方法出现抛出异常时,无论外部方法是否捕获异常,内外事务都会回滚;

1.2,外部方法没有事务注解 , 内部方法也有事务注解且传播行为是propagation.required,当内部方法出现抛出异常时。无论外部方法是否捕获异常,只有内部方法回滚事务;

1.3,外部方法有事务注解且传播行为是propagation.required,内部方法没有事务注解。当内部方法出现抛出异常时,外部捕获异常,内外事务都不会回滚;

1.4,外部方法有事务注解且传播行为是propagation.required,内部方法没有事务注解。当内部方法出现抛出异常时,外部不捕获异常,内外事务都会回滚;

 

2.requiresNew 

 技术图片

 

 

2.1,外部方法有事务注解且传播行为是propagation.required, 内部方法也有事务注解且传播行为是propagation.requiredNew。当内部方法出现抛出异常时,外部方法捕获异常,只有内事务会回滚;当内部方法抛出异常时,外部方法不捕获异常,那么内外事务都会回滚;

2.2,外部方法有事务注解 且 传播行为是propagation.required, 内部方法也有事务注解且传播行为是propagation.requiredNew。当外部方法出现抛出异常时,只有外部事务会回滚;

3. Nested

 

PROPAGATION_NESTED is different again in that it uses a single physical transaction with multiple savepoints that it can roll back to. Such partial rollbacks allow an inner transaction scope to trigger a rollback for its scope, with the outer transaction being able to continue the physical transaction despite some operations having been rolled back. This is typically mapped onto JDBC savepoints, so will only work with JDBC resource transactions

 3.1,外部方法有事务注解且传播行为是propagation.required , 内部方法也有事务注解且传播行为是propagation.nested。当内部方法出现抛出异常时,外部方法捕获异常,只有内事务会回滚;当内部方法抛出异常时,外部方法不捕获异常,那么内外事务都会回滚;

3.2,外部方法有事务注解且传播行为是propagation.required , 内部方法也有事务注解且传播行为是propagation.nested。当外部方法出现抛出异常时,内外事务都会回滚;

 

Propagation.REQUIRED

quired , 内部方法也有事务注解 且 

事务的传播行为解析(Transaction propagation: Required,RequiresNew,Nested)

标签:color   fan   size   ext   spi   trigger   margin   padding   outer   

原文地址:https://www.cnblogs.com/yanyuechao/p/8470835.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!