想要了解什么是Spring MVC事务传播行为,首先我们就要了解一下什么是事务传播行为?事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何运行。例如:methodA方法调用methodB方法时,methodB是继续在调用者methodA的事务中运行呢,还是为自己开启一个新事务运行,这就是由methodB的事务传播行为决定的。
Spring MVC框架中Spring事务管理功能无疑是众多开发框架中最为出色的,Spring MVC中,有7种类型的事务传播行为。事务传播行为是Spring MVC框架提供的一种事务管理方式,它不是数据库提供的。Spring MVC事务传播行为确定了客户端和被调用端的事务边界,简单来说就是多个具有事务控制的Service的相互调用时所形成的复杂的事务边界控制。下面我们来看看这7种事务传播行为。
1.PROPAGATION_REQUIRED
如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,这是最常见的选择,也是Spring MVC默认的事务传播行为。被设置成这个级别时,会为每一个被调用的方法创建一个逻辑事务域。如果当前方法已经创建了事务,那么后面的方法支持当前的事务,如果没有事务会重新建立事务。
2.PROPAGATION_SUPPORTS
支持当前事务,如果当前存在事务,就加入该事务,与调用者处于同一个事务上下文,回滚统一回滚。如果当前不存在事务,就以非事务执行。
3.PROPAGATION_MANDATORY
支持当前事务,如果当前存在事务,就加入该事务,与调用者处于同一个事务上下文,回滚统一回滚。如果当前不存在事务,就抛出异常。
4.PROPAGATION_REQUIRES_NEW
创建新事务,无论当前存不存在事务,都创建新事务。如果调用者存在一个事务,则把当前事务挂起,这两个事务不处于同一个上下文,如果各自发生异常,各自回滚。
5.PROPAGATION_NOT_SUPPORTED
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6.PROPAGATION_NEVER
以非事务方式执行,如果当前存在事务,则抛出异常。
7.PROPAGATION_NESTED
如果当前存在事务,则在嵌套事务内执行。嵌套事务是指,内层事务依赖于外层事务,外层事务失败时,会回滚内层事务所做的动作,而内层事务操作失败不会引起外层事务的回滚。如果当前没有事务,则新建一个事务,按REQUIRED属性执行。
PROPAGATION_NESTED与PROPAGATION_REQUIRES_NEW非常类似,如果调用者不存在一个事务则会开启一个新事务。如果存在一个事务时,内层事务与外层事务就像两个独立的事务一样,一旦内层事务进行了提交后,外层事务不能对其进行回滚,两个事务互不影响,它不是一个真正的嵌套事务。同时需要JTA事务管理器的支持。使用NESTED时,外层事务的回滚可以引起内层事务的回滚,而内层事务的异常并不会导致外层事务的回滚,它是一个真正的嵌套事务。
上面就是对7种Spring MVC事务传播行为的介绍,事务传播行为是Spring MVC框架独有的事务增强特性,为我们提供的强大的工具箱,使用事务传播行为可以为我们的开发工作提供许多便利。在本站的Spring MVC视频教程中,有7种Spring MVC事务传播行为的实战演练,想动手实践的小伙伴可以去感受一下事务传播行为的魅力。
QCode09-04 14:38
Code大师09-04 14:50
不写代码你养我啊08-23 11:14
不写代码你养我啊09-17 18:02
要学习了06-18 18:13