spring事务的传播机制

作者&投稿:姚伯 (若有异议请与网页底部的电邮联系)
~ 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:外层报错有事务,内层正常;外层回滚,内层回滚
示例:....


SpringMVC中的@Transaction怎么使用,有什么作用
1、REQUIRED:业务方法需要在一个事务中运行。如果方法运行中,已经处在一个事务中,那么加入到该事务,否则为自己创建一个新的事务。2、NOT_SUPPORIED:声明方法不需要事务。如果方法没有关联到一个事务,容器不会为它开启事务。如果方法在一个事务中被调用,该事务会被挂起,在方法调用结束后,原先的事...

请叙述spring对持久层支持所采用的策略?2.请问spring如何简化事务...
参考答案:pring简化事务配置有两种方式:第一种方式就是使用TransactionProxyFactoryBean创建事务代理(通常事务代理以Service层为目标bean)配置hibernate的事务管理器,使用HibernateTransactionManager类,该类实现了PlatformTransactionManager接口,针对hibernate 持久化连接的特定实现。第二种方式使用自动创建代理简化...

springmvc是微服务框架吗?
pringboot我理解就是把springspringmvcspringdatajpa等等的一些常用的常用的基础框架组合起来,提供预设的配置,然后提供可插拔的设计,就是各种starter,来方便开发者使用这一系列的技术,套用官方的一句话,spring家族发展到今天,已... 这个跟springmvc一样的啊,首先你看你的spring-mvc.xml有没有配置defaultViewResolver,然后...

No transaction aspect-managed TransactionStatus in scope
原因四:还可能是pring AOP代理不支持类内部方法调用导致的,就是同一个Service中a方法调用b方法。Spring官方也不推荐使用类内部方法相互调用,一个是代理对象、一个是目标对象,Spring没办法对目标对象进行事务切面处理。有很多成熟的方案可以解决这个问题,比如开启AOP代理ThreadLocal支持或者Service中声明一个...

org.springframework.web.servlet.ModelAndView这个类在spring框架中的...
spring框架需要哪些jar包 spring-context-3.1.0.RELEASE.jar spring-aop-3.1.0.RELEASE.jar aopalliance-1.0.jar spring-beans-3.1.0.RELEASE.jar pring-core-3.1.0.RELEASE.jar spring-expression-3.1.0.RELEASE.jar spring-a *** -3.1.0.RELEASE.jar spring-webmvc-3.1...

java五层架构(java五层架构模式书)
_馐且幌盗锌蚣艿挠行蚣希悄壳白钊让诺奈⒎窨蚣艿氖籽J紫龋_pringBoot开发的便利性,巧妙地简化了分布式系统基础的开发,如服务发现注册、配置中心、消息总线、负载平衡、断路器、数据监控等。,可以使用SpringBoot的开发风格一键启动和部署。 _濉Netty。JBOSS提供的开源异步Netty是基于事件驱动的网络通信框架。能迅速提...

陈阅增的成长经历
由于另外一位同学更需要这个职位,他离开临时大学,到湖南沅陵投奔他的岳父魏建宏,在魏任院长的沅陵卫生院任事务员。1938年8月,陈阅增和夫人魏式琪同赴昆明。从1938 年8月至1939年暑假,任云南大学生物系助教。1939年至1946年任西南联合大学助教、讲师。在西南联大,陈阅增开始了他的原生动物学的研究...

福利国家的理论基础是什么??
福利国家的理论基础是福利经济学,它认为资本主义生产的目的是寻求最大限度的社会福利。当社会中每个人的个人收入的效用总和达到最大值时,社会的经济福利也就达到最大值。

开一家家具公司需要什么条件?
您凭核发的查名核准单、银行询证函、一套章去您就近银行办理注册资金进账手续,办理完后从银行领取投资人缴款单和对账单,银行询证函则由银行直接快递会计事务所,随后由会计事务所办理验资报告。验资为防止意外发生需要您亲自去银行办理进账手续,这样的资金安全才能达到100%安全。验资通过后核发验资报告2份。三、签字(...

开一家家具公司需要什么条件
4.刻私章5.到会计师事务所领取“银行询征函” 6.注册公司:到工商局领取公司设立登记的各种表格7.凭营业执照,到公安局指定的刻章社,去刻公章、财务章。8.去银行开基本户:凭营业执照去银行开立基本帐号。9.办理税务登记:领取执照后,30日内到当地税务局申请领取税务登记证。办理税务登记证时,必须...

三穗县18051114690: Spring 如何实现事物的传播属性? -
窦鲍捷清: 在Spring中,主要是通过AOP来完成声明式的事务管理.要了解Spring对事务的支持,首先要了解事务的属性.在Spring中事务属性主要分以下几方面:1、传播行为(Propagation behavior) 可以找到相对应的常数与说明,列出下列几个:...

三穗县18051114690: 怎么理解spring事务的传播特性 -
窦鲍捷清: Spring中通过Propagation来设置事务的传播属性的,在这个属性中提供了我们其中关于事务传播的特性: 1. PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择. 2. PROPAGATION_...

三穗县18051114690: 什么是事务的传播特性? -
窦鲍捷清: 就是多个事务方法相互调用时,事务如何在这些方法间传播.一、除了事务的传播行为外,事务的其它特性 Spring 是借助底层资源的功能来完成的,Spring 无非只充当个代理的角色.但是事务的传播行为却是 Spring 凭借自身的框架提供的功...

三穗县18051114690: spring传播特性怎么实现的 -
窦鲍捷清: Spring 事务一个被讹传很广说法是:一个事务方法不应该调用另一个事务方法,否则将产生两个事务.结果造成开发人员在设计事务方法时束手束脚,生怕一不小心就踩到地雷.其实这种是不认识 Spring 事务传播机制而造成的误解,Spring 对...

三穗县18051114690: Spring的内部机制是什么? -
窦鲍捷清: 工作流程:spring mvc将请求提交到DispatcherServlet,DispatcherServlet根据配置的映射关系将请求提交到相应处理Controller,Controller进行逻辑处理后向DispatcherServlet返回一个结果,DispatcherServlet再根据这个结果找到指定视图对象返回...

三穗县18051114690: Spring的事物回滚机制 -
窦鲍捷清: 配置一个事务处理类:PROPAGATION_REQUIREDPROPAGATION_REQUIRED,-ExceptionPROPAGATION_REQUIREDPROPAGATION_REQUIRED 然后在具体的业务调用中继承这个类: 这样的话,在MagazineManager中定义的方法在执行excute时若有错就会自动回滚.

三穗县18051114690: spring事务传播机制 挂起是打开一个新连接么 -
窦鲍捷清: Spring事务传播机制Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 事务传播行为类型 说明 PROPAGATION_REQUIRED 如果当前没有事务,就新建...

三穗县18051114690: .spring的事务有几种方式?谈谈spring事务的隔离级别和传播行为 -
窦鲍捷清: 1、 Propagation key属性确定代理应该给哪个方法增加事务行为.这样的属性最重要的部份是传播行为.有以下选项可供使用:PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择. ...

三穗县18051114690: spring的事务传播行为,究竟意义何在 -
窦鲍捷清: 其实通常下,spring事务的传播行为和隔离级[transaction behaviorand isolatedlevel]都是互相配合,共同使用才能将spring事务运用到极致,事务的传播行为就是一个个的事务策略而已,具体运用哪一个,根据自己的需求和程序性能平衡去抉择,意义何在? 意义是大大的,由于不能保证系统绝对不出错,所以当出错的时候,应该讲之前所处理的事情全部回退到事件发生之前,包括对数据库这些修改等等,这是最为简单的场景,当然还有事务之间的交互,比如A事务失败了,会不会影响B事务,A事务捕获B事务的异常,这时候应该怎么办,要不要回滚,还有一些其他情况,这些都需要spring事务传播行为的支持.

三穗县18051114690: spring 的不同事务传播行为有哪些,干什么用的 -
窦鲍捷清: springmvc只是spring其中的一部分.spring 可以 支持 hibernate ,ibatis ,JMS,JDBC 支持事务管理, 注解功能,表达式语言,测试 springmvc 就是一个简单的web 框架,上手很快,可以代替SSH框架. springmvc 比 struts2 性能优一些.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网