spring事务的传播机制

 我来答
会哭的礼物17
2022-07-06 · TA获得超过1.2万个赞
知道大有可为答主
回答量:6355
采纳率:100%
帮助的人:36.1万
展开全部
JAVA EE应用中事务处理是一个非常重要并且设计范围很广的领域。作为应用平台的SPRING,具有在多种环境配置和使用事务处理的能力,了解spring事务的传播机制,可以更好的帮助我们在实际项目中使用事务来处理各种业务场景。

所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。
REQUIRED (默认):spring的默认传播行为。如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
REQUIRES_NEW :创建一个新的事务,如果当前存在事务,则把当前事务挂起。
SUPPORTS :如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行,不会开启新的事务。
NOT_SUPPORTED :以非事务方式运行,如果当前存在事务,则把当前事务挂起。
MANDATORY :如果业务方法执行时已经在一个事务中,则加入当前事务。否则抛出异常。
NESTED :如果当前已经在一个事务中了,则嵌套在已有的事务中作为一个子事务。如果当前没在事务中则开启一个事务。内层事务结束,要等着外层一起提交 。
NEVER :以非事务方式运行,如果当前存在事务,则抛出异常。

内层外层均有事务
场景1:内层方法报错抛出异常,外层有try-catch,内外层均回滚

场景2:内层方法报错抛出异常,外层无try-catch,内外层均回滚

场景3:外层方法报错,内外层均回滚
示例:....
外层有事务,内层无事务
场景:加入外层的事务,不管内层,外层报错,都会回滚事务
示例:....

场景1:外层报错,内层正常,外层回滚,内层提交,不影响内层。
示例:....
场景2:内层报错,外层使用try-catch内层的异常,内存回滚,外层提交。

场景3:内层报错,抛出异常,外层没有捕获处理内层抛出来的这个异常,外层、内存均回滚。

场景1:外层有事务,内存报错;外层、内层回滚
示例:....
场景2:外层有事务,使用try/catch内层异常,内层报错;外层、内层回滚
示例:....
场景3:外层报错有事务,内层正常;外层、内层回滚
示例:....
场景4:外层正常无事务,内层报错;外层、内层均提交
示例:....

场景1:外层正常有事务,内层报错;外层回滚,内层提交
示例:....
场景2:外层正常有事务try/catch内层,内层报错;外层提交,内层提交
示例:....

场景1:外层正常有事务,内层报错;外层、内层回滚
示例:....
场景2:外层正常无事务,内层报错;外层提交,内层回滚
示例:....

前提:
1.JDK版本要在1.4以上,有java.sql.Savepoint。因为nested就是用savepoint来实现的。
2.事务管理器的nestedTransactionAllowed属性为true。
3.外层try-catch内层的异常

场景1:内层正常,外层报错;外层、内层回滚。
示例:....
场景2:内层报错,外层正常;外层、内层回滚。(因为默认成为了子事务)
示例:....
场景3:内层报错,外层正常try /catch 内层;内层回滚,外层提交。
示例:....

场景1:外层正常有事务,内层报错;外层、内层回滚。
示例:....
场景2:外层正常无事务,内层报错;外层提交,内层提交
示例:....
场景3:外层报错有事务,内层正常;外层回滚,内层回滚
示例:....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式