动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

简述7种Spring MVC事务传播行为

08-31 17:49 61浏览
举报 T字号
  • 大字
  • 中字
  • 小字

 想要了解什么是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事务传播行为的实战演练,想动手实践的小伙伴可以去感受一下事务传播行为的魅力。

0人推荐
共同学习,写下你的评论
0条评论
天鹏桑
程序员天鹏桑

12篇文章贡献57547字

作者相关文章更多>

推荐相关文章更多>

DOM渲染的详细过程

QCode09-04 14:38

CSS水平和垂直居中技巧大梳理

Code大师09-04 14:50

mui的input框在IOS系统下无法聚焦或点击多次才能聚焦

不写代码你养我啊08-23 11:14

推荐的-视.频播放器以及在线客服

不写代码你养我啊09-17 18:02

谈谈java多线程的三大特性

要学习了06-18 18:13

发评论

举报

0/150

取消