`

spring声明式事务详解

阅读更多

 

class A {
    public void addA() {
        // something...
    }
    public void addB() {
        // something...
    }
    public void addAll() {
        addA();
        addB();
    }
}

addB和addAll的传播行为REQUIRE

 

如果addA的传播行为REQUIRES_NEW

当调用addAll的时候并不会给addA()重新开启一个事务,而是在addAll事务之中。(就像addAll方法调用非事务的普通方法会被包含在addAll事务中)

 

因为spring的AOP(动态代理)的原因

在一次方法调用过程中一个类中的方法只会被代理一次,不会被多次代理,而且代理的是调用的那个方法

所以如果调用的是addAll 则只会为addAll代理,并且根据其传播行为开启事务,addA和addB 由于和AddAll是在同一个类中

所以不会再开启事务。只有方法中调用的是其他类的方法时才生效。

 

总结:声明式事务传播属性只发生在不同的类之间。

 

第一个场景:

同一个BO类的一个方法中,如果catch住异常,那么事务管理就会认为没有异常,而提交事务。



 

第二个场景

同一个BO类的一个方法中,如果往外抛异常了,事务管理就会认为方法异常,从而回滚事务。



 

第三个场景

同一个BO类的两个方法中,A方法中进行create操作,之后A方法中调用B方法进行delete操作,A,B方法都受事务控制。当B方法发生异常,且在B方法中catch住异常,那么事务就会认为没有异常,而提交事务。



 

第四个场景

同一个BO类的两个方法中,A方法中进行create操作,之后A方法中调用B方法进行delete操作,A,B方法都受事务控制。在B方法往外抛异常,A方法中catch了异常,事务管理就会认为没有异常,而提交事务。



 

第五个场景

同一个BO类的两个方法中,A方法中进行create操作,之后A方法中调用B方法进行delete操作,A,B方法都受事务控制。在B方法往外抛异常,A方法继续往外抛异常,事务管理就会认为方法异常,而回滚事务。



 

第六个场景

xxxBO类中,执行create方法,之后在create方法中调用yyyBO类中的delete方法,方法都受事务控制,那么yyyBO的方法就会进行事务合并。

在yyyBO的delete方法中抛异常,但是被自己catch住了,没有往外抛异常,

由于xxxBO没有往外抛异常,事务管理就会认为方法没有异常,而提交事务。



 

第七个场景

xxxBO类中,执行create方法,之后在create方法中调用yyyBO类中的delete方法,方法都受事务控制,那么yyyBO的方法就会进行事务合并。

在yyyBO的delete方法中往外抛异常,在xxxBO的create方法中catch了异常,

事务管理认为方法没有异常,进行事务提交,但是事务在yyyBO的delete方法中,已经被标识为rollback-only,所以最后事务还是发生回滚



 

第八个场景

xxxBO类中,执行create方法,之后调用yyyBO类中的delete方法,方法都受事务控制,那么yyyBO的方法就会进行事务合并。

在yyyBO的delete方法中往外抛异常,在xxxBO的create方法中往外抛异常,事务管理就发现方法异常,回滚事务。



 

总结:方法只有往外抛异常了,事务管理器才会回滚事务。如果事务传播合并了,那么内层的方法抛异常,整体事务就会回滚,不管你是否在外层方法catch了异常。

  • 大小: 37 KB
  • 大小: 51.3 KB
  • 大小: 51.8 KB
  • 大小: 54.1 KB
  • 大小: 57.1 KB
  • 大小: 53.2 KB
  • 大小: 63 KB
  • 大小: 61.2 KB
分享到:
评论

相关推荐

    spring编程式事务与声明式事务详解

    spring编程式事务与声明式事务详解,超详细!

    spring编程式事务与声明式事务详解[参照].pdf

    spring编程式事务与声明式事务详解[参照].pdf

    Spring的编程式事务和声明式事务详解

    主要介绍了Spring的编程式事务和声明式事务的相关内容,涉及Spring事务属性、Spring事务的基本类等知识,需要的朋友可以了解下。

    spring事务详解

    Spring的事务框架将开发过程中事务管理相关的关注点进行适当的分离,并对这些关注点进行合 理的抽象,最终打造了一套使用方便,...带来了原来只有CMT才有的声明式事务管理的特殊待遇,却无需绑定到任何的应用服务器上。

    Spring声明式事务@Transactional知识点分享

    在本篇文章里小编给大家整理了关于Spring声明式事务@Transactional详解内容,需要的朋友们可以参考下。

    Spring框架 jar 架包 spring开发文档详解

    Spring BeanFactory Spring IOC(控制翻转)/DI(依赖注入) Spring Proxy Spring AOP 面向切面编程 Spring与JDBC整合 Spring声明式事务 Spring与Hibernate整合 Spring与Struts整合

    spring高级编程详解

    Spring声明式事务让我们从复杂的事务处理中得到解脱。使得我们再也无需要去处理获得连接、关闭连接、事务提交和回滚等这些操作。再也无需要我们在与事务相关的方法中处理大量的try…catch…finally代码。

    Spring事务详解

    spring事务讲解,包括声明式事务和编程式事务。比较详细。

    详解Spring学习之声明式事务管理

    主要介绍了详解Spring学习之声明式事务管理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    主题:详解spring事务属性.doc

    我们在使用Spring声明式事务时,有一个非常重要的概念就是事务属性。事务属性通常由事务的传播行为,事务的隔离级别,事务的超时值和事务只读标志组成。我们在进行事务划分时,需要进行事务定义,也就是配置事务的...

    Spring框架--事务管理

    Spring提供了两种事务管理方式:编程式事务管理和声明式事务管理; 描述了声明式事务管理,XML,注解;事务配置详解。。。

    SSM框架教程Spring+SpringMVC+MyBatis全覆盖_Java热门框架视频教程

    7、Spring的声明式事务控制 8、SpringMVC的介绍及其快速入门 9、SpringMVC的数据请求和响应 10、SpringMVC的异常处理及其拦截器 11、MyBatis简介及其入门 12、MyBatis的配置文件详解 13、MyBatis的多表操作 适用...

    吴天雄--Spring笔记.doc

    Spring个人笔记,共计59页。第一天内容:Spring框架简介(EJB、JMX、Spring核心功能、Spring模块...第三天内容:Spring自动装配,Spring自动加载properties文件,单例设计模式,声明式事务,Ajax,JSON。 --author:

    Spring 事务隔离与事务传播的详解与对比

    Spring的事务管理分为声明式跟编程式。声明式就是在Spring的配置文件中进行相关配置;编程式就是用注解的方式写到代码里。 Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager...

    spring.doc

    5.1.8声明式事务管理 116 5.1.8.1Spring的事务管理器 117 5.1.8.2Spring事务的传播属性 117 5.1.8.3Spring事务的隔离级别 117 拓展: 118 5.1.8.4以XML配置的 形式 119 拓展: 120 5.1.8.5以注解方式配置 125 拓展:...

    Spring+SpringMVC配置事务管理无效原因及解决办法详解

    主要介绍了Spring+SpringMVC配置事务管理无效原因及解决办法详解,具有一定借鉴价值,需要的朋友可以参考下

    spring事务Propagation及其实现原理详解

    主要介绍了spring事务Propagation及其实现原理详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

    Spring中事务用法示例及实现原理详解

    主要给大家介绍了关于Spring中事务用法示例及实现原理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Spring 2.0 开发参考手册

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 插入事务操作 9.5.8. ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.6.1. @Transactional 有关的设置 ...

Global site tag (gtag.js) - Google Analytics