文章目录
1.什么是事务
事务是指一组数据库操作,这些操作被认为是一个不可分割的单元,要么全部成功执行,要么全部失败回滚。
2.什么是事务传播行为
事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。
例如:methodA事务方法调用methodB事务方法时,methodB是继续在调用者methodA的事务中运行呢,还是为自己开启一个新事务运行,这就是由methodB的事务传播行为决定的。
让我们通过一个具体的例子来解释。假设我们有一个电子商务网站,用户下单后,需要同时更新订单表和库存表。我们可以将更新订单表的逻辑放在methodA中,并将更新库存表的逻辑放在methodB中。
如果methodB的事务传播行为设置为"REQUIRED"(默认行为),那么当methodB被methodA调用时,它会加入到methodA的事务中,并与methodA一起在同一个事务中运行。这意味着如果在methodB中发生了任何错误,整个事务都会被回滚,包括methodA对订单表的更新。
另一方面,如果methodB的事务传播行为设置为"REQUIRES_NEW",那么当methodB被methodA调用时,它会为自己开启一个新的独立事务,并在该事务中运行。这意味着即使methodB中发生了错误并进行了回滚,methodA对订单表的更新仍然会保持不变。
因此,methodB的事务传播行为决定了它是在调用者methodA的事务中继续运行,还是为自己开启一个新的事务运行。这样可以根据具体业务需求来选择合适的事务传播行为,以确保数据的一致性和可靠性。
3.spring事务实现方式
4.spring的7种事务传播行为
5.PROPAGATION_NESTED 与PROPAGATION_REQUIRES_NEW的区别
使用PROPAGATION_REQUIRES_NEW时,内层事务与外层事务是两个独立的事务。一旦内层事务进行了提交后,外层事务不能对其进行回滚。两个事务互不影响。使用PROPAGATION_NESTED时,外层事务的回滚可以引起内层事务的回滚。而内层事务的异常并不会导致外层事务的回滚,它是一个真正的嵌套事务。