请先看如下代码:
@Transactional
public CommonReturnType funA() {
//...
funB(); // 调用函数B
//...
func(); // 调用函数C
//...
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void funB() {
//...
}
@Transactional(propagation = Propagation.REQUIRES)
public void funC() {
//...
}
关于注解的有关解释
Spring遇到嵌套事务时,当被嵌套的事务被定义为“PROPAGATION_REQUIRES_NEW”时,
- 内层Service的方法被调用时,外层方法的事务被挂起;
- 内层事务相对于外层事务是完全独立的,有独立的隔离性;
- 新的执行完毕,继续执行老的事务
Spring遇到嵌套事务时,当被嵌套的事务被定义为“PROPAGATION_REQUIRES”时,
- 如果有事务,那么加入事务,没有的话新建一个
当出现异常时:
- 1、当方法B或者C报错时,A、B、C方法都回滚
- 2、当方法A、B、C异常被捕获时,A、B、C事务不回滚(a、b、c均入库)
- 3、当方法BC执行后,方法A报错时,A、C事务回滚,B事务不回滚(b数据入库)
References
[1] (转)添加PROPAGATION_REQUIRES_NEW 事务没有产生作用
[2] 常用事务@Transactional(propagation=Propagation.REQUIRES_NEW)和@Transactional(propagation=Propagation.REQU
本文探讨了Spring中@Transactional(propagation = Propagation.REQUIRES_NEW)注解在处理嵌套事务时的行为。当使用此注解时,内层事务将独立于外层事务执行,具有自己的隔离性。在异常处理方面,如果内层事务报错,所有事务都会回滚;而如果异常被捕获,只有未完成的事务会回滚。
783

被折叠的 条评论
为什么被折叠?



