首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

18个示例详解 Spring 事务传播机制

* Analogous to EJB transaction attribute of the same name. */ 不使用事务,如果存在事务,就抛出异常。...NEVER 的方法不使用事务,调用 NEVER 方法如果有事务,就抛出异常。...也不使用事务,所以 a1 和 b1 都添加成功,b2添加失败。...对比示例17和示例18,NESTED 和 REQUIRED 的区别: REQUIRED 传播属性表明调用方和被调用方都是使用同一个事务,被调用方出现异常,无论异常是否被捕获,因为属于同一个事务,只要发生异常...无论是否调用方是否存在事务,都是以非事务的方式执行,出现异常也会回滚 NEVER 不用事务,存在事务就报错,和 MANDATORY 相反 NESTED 嵌套事务,新建一个子事务,事务执行相互独立,如果调用方出现异常

2.3K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    spring事务的传播属性--@Transaction的Propagation属性

    在Spring的@Transaction中,有个重要的属性:Propagation,指的是事务方法之间发生嵌套调用时,事务的传播行为(当前调用的这个方法的事务,和当前的其他事务之间的关系)。...,就加入这个事务,没有事务,就抛出异常 MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY), //新建一个事务执行,如果当前有事务,就把当前的事务挂起...(TransactionDefinition.PROPAGATION_NOT_SUPPORTED), //在无事务状态下执行,如果当前有事务,会抛出异常 NEVER(TransactionDefinition.PROPAGATION_NEVER...There is no analogous feature in EJB....,会抛出异常 NEVER(TransactionDefinition.PROPAGATION_NEVER), //当前有事务,就新建一个事务,嵌套执行,当前无事务,就新建一个事务执行 //这个看了不同的文章

    2K30

    Spring相关面试题:谈一谈你对事务的理解?

    PROPAGATION_REQUIRED,required:支持当前事务,如果没有事务,创建一个新的。 ​ A 有事务,B使用A的事务。(支持当前事务) ​ A没有事务,B创建新的。...() PROPAGATION_SUPPORTS,supports:支持当前事务,如果没有事务,以非事务执行。 ​ A 有事务,B使用A的事务。...(支持当前事务) ​ A没有事务,B以非事务执行。 PROPAGATION_MANDATORY,mandatory:支持当前事务,如果没有事务,抛异常 ​ A 有事务,B使用A的事务。...A 没有事务,B以非事务执行。 PROPAGATION_NEVER, never:不支持当前事务,如果有抛异常。 ​ A 有事务,B抛异常 ​ A 没有事务,B以非事务执行。...PROPAGATION_NESTED, nested :嵌套事务,底层使用savepoint进行嵌套事务操作。 ​ 保存点允许回顾部分事务。

    53230

    关于Spring的事务Transactional,锁同步,并发线程Spring事务传播机制和数据库隔离级别

    这可以通过“瞬间共享读锁”和“排他写锁”实现,读取数据的事务允许其他事务继续访问该行数据,但是未提交写事务将 会禁止其他事务访问该行。SQL Server 默认的级别。...可重复读取(Repeatable Read): 禁止 不可重复读取和脏读取。...但是有时可能出现幻影数据,这可以通过“共享读锁”和“排他写锁”实现,读取数据事务将会禁止写事务(但允许读事务),写事务则禁 止任何其他事务。...* Analogous to EJB transaction attribute of the same name. */ MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY...* Analogous to EJB transaction attribute of the same name. */ NEVER(TransactionDefinition.PROPAGATION_NEVER

    1.6K30

    重点来了:事务一致性的深入研究&EJB的全生命周期 | 从开发角度看应用架构5

    使用CMT的EJB不得使用任何与应用程序服务器的事务范围和边界冲突的JTA API方法。...事务属性可以用来控制执行UserService类方法的范围和上下文。 Java EE规范定义了六个事务属性。...设置交易属性 通过使用javax.ejb.TransactionAttribute注释注释EJB类或方法并将其设置为javax.ejb.TransactionAttributeType枚举常量之一来声明事务属性...如果使用@TransactionAttribute在类级别注释EJB,则指定的属性适用于EJB中的所有方法。 使用@TransactionAttribute注解特定方法仅将该属性应用于该方法。...(TransactionAttributeType.NEVER)事务属性进行注释,因为此方法只执行一个只读操作 该数据库并不插入,删除或更新任何数据。

    87740

    Spring的声明式事务管理

    这些简单的示例应该清楚地说明,为了维护数据完整性和一致性,必须使用事务。不过对于在 Java 平台中实现事务的复杂性和陷阱而言,这些示例只是涉及了冰山一角。...不管是使用 Spring Framework,还是使用 EJB,使用 REQUIRES_NEW 事务属性都会得到不好的结果并导致数据损坏和不一致。...事务回滚陷阱 我将最常见的事务陷阱留到最后来讲。遗憾的是,我在生产代码中多次遇到这个错误。我首先从 Spring Framework 开始,然后介绍 EJB 3。...还可以使用此属性的相反形式(noRollbackFor)指定除某些异常以外的所有异常应该强制回滚。...本系列后续文章中描述的事务策略将介绍何时、何处使用回滚指令,以及何时使用 REQUIRED 与 MANDATORY 事务属性。

    97050

    Spring的一些基本概念(面试备用)

    然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。 ◆ 框架——Spring可以将简单的组件配置、组合成为复杂的应用。...◆Spring能消除使用各种各样格式的属性定制文件的需要,在整个应用和工程中,可通过一种 一致的方法来进行配置。...例如,Spring能使用 AOP提供声明性事务而不通过使用EJB容器,如果你仅仅需要与单个的数据库打交道,甚至不需要JTA实现。...切面对关注点进行模块化,例如横切多个类型和对象的事务管理 Spring的一个关键的组件就是AOP框架,可以自由选择是否使用AOP 提供声明式企业服务,特别是为了替代EJB声明式服务。...PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。

    30220

    JavaEE - JPA(2):EJB中的事务管理

    Container事务类型 在这种事务类型中,由于应用服务器提供的容器对事务提供了一定程度的支持,因此有下面两种实现思路: 在容器的帮助下完成自动划分 使用JTA接口在应用中编码完成显式划分 EJB中的事务划分...下面就来看看这个注解定义了那些可选项: MANDATORY: 运行当前方法时要求存在处于active状态的事务。如果没有active状态的事务则会抛出异常。...NEVER: 当运行的当前方法采用此选项时,如果运行时发现有active状态的事务,那么会直接抛出一个异常。 在上面的各种选项中,出现了事务的创建以及挂起。...,什么时候结束。...不像CMT那样通常以业务方法的开始和结束作为事务的起点和终点。如果只开始了一个事务,而忘记关闭它,那么会导致异常的发生,同时该事务也会被容器回滚。 而且,BMT类型的事务无法使用从外部进入的事务。

    93110

    Spring事物的传播行为案例分析

    1、spring给出经常面试的考点Spring事务的4个特性含义---这个很容易理解 2、spring事务传播特性的定义以及案例分析  一、事务的特性ACID 这四个英文单词拼写我一直记不住,求记忆方法...xml属性中进行配置。...4、propagation_mandatory,必须在一个事务中运行,否则就会抛出异常mandatory 这个单词有强制性的意思我们默认用required 而不用mandatory,是因为mandatory...事务的传播行为required_new(代码注释清忽略)  结果和require一样,两条数据都没有入库,唯一健冲突导致第一条数据回滚,大家可以思考下我下面这两种情况。 ?...事务的传播行为not_suppoted  这种情景下,如果你根据我的思路一步走的应该可以想到id 为17的入库,第二条主键冲突虽然然而notSupportSonTransationsl()这个方法没有事务所以不影响第一条入库情况

    56910

    猫头鹰的深夜翻译:spring事务管理

    事务管理的一个重要方面是定义正确的事务边界,例如事务何时开始,什么时候应该结束,什么时候应该在数据库中提交数据,什么时候应该回滚(在出现异常的时候)。...因为一旦事务开始,就无法进行配置 READ_COMMITTED 防止脏读;会发生不可重复的读取和幻读。 READ_UNCOMMITTED 会出现脏读,不可重复读和幻读。...其它的选项如REQUIRES_NEW, MANDATORY, SUPPORTS, NOT_SUPPORTED, NEVER, 和NESTED REQUIRED 表示如果当前没有活跃的事务上下文,目标方法将无法运行...如果已有事务,它将暂停。 MANDATORY 表示目标方法需要运行中的事务。如果没有事务,它将抛出异常。 SUPPORTS 无论是否有事务上下文,目标方法可以执行。...服务层应该包含逻辑上进入事务的用户交互的详细级用例行为。 在一些CRUD应用中,Service层的业务代码并不复杂,和Dao层的代码差不多。

    58620

    weblogic EJB 学习

    大家好,又见面了,我是你们的朋友全栈君。 EJB 学习笔记 1、ejb 基础知识 (1) 无状态会话bean 不保存客户机的会话状态 优点:使用小量的实例即可满足大量的客户。...工厂,客户机可以使用本地接口创建、找出和删除ejb实例。...的默认事务属性指定为Required) Required(容器管理的事务使用的属性 Nerver、NotSupported...,否则不能 Mandatory 如果调用者有一个事务,相应的EJB可以参与事务,否则,TransactionRequiredException Required 如果调用者有一个事务,相应的EJB可以参与事务...使用EJBObject.setRollbackOnly(); (4) 不能让事务涉及web层和表示逻辑 (5) 企业应用中不应当选用supports 事务属性,因为只有调用者开始一个事务后,ejb才能在事务中运行

    1.3K20

    Spring事务的传播行为案例分析

    1、spring给出经常面试的考点Spring事务的4个特性含义---这个很容易理解 2、spring事务传播特性的定义以及案例分析  一、事务的特性ACID 这四个英文单词拼写我一直记不住,求记忆方法...xml属性中进行配置。...4、propagation_mandatory,必须在一个事务中运行,否则就会抛出异常mandatory 这个单词有强制性的意思我们默认用required 而不用mandatory,是因为mandatory...,重新执行新加的事务 [qqq] 事务的传播行为required_new 结果和require一样,两条数据都没有入库,唯一健冲突导致第一条数据回滚,大家可以思考下我下面这两种情况。...with propagation 'never' [1596530344292092543.jpeg] 事务的传播行为NEVER 8、 propagation_nested,这种嵌套的事务,外围如果没有事务则自己另起一个事务

    98110

    EJB 学习笔记

    大家好,又见面了,我是你们的朋友全栈君。 EJB 学习笔记 1、ejb 基础知识 (1) 无状态会话bean 不保存客户机的会话状态 优点:使用小量的实例即可满足大量的客户。...工厂,客户机可以使用本地接口创建、找出和删除ejb实例。...的默认事务属性指定为Required) Required(容器管理的事务使用的属性 Nerver、NotSupported...相应的EJB调用也可以参与事务,否则不能 Mandatory 如果调用者有一个事务,相应的EJB可以参与事务,否则,TransactionRequiredException Required...使用EJBObject.setRollbackOnly(); (4) 不能让事务涉及web层和表示逻辑 (5) 企业应用中不应当选用supports 事务属性,因为只有调用者开始一个事务后,ejb才能在事务中运行

    55020

    Spring事务与非事务方法相互调用

    如果没有事务则开启一个新的事务。 2 SUPPORTS 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行 3 MANDATORY 如果已经存在一个事务,支持当前事务。...如果没有活动事务,则按REQUIRED属性执行 5 NEVER 总是非事务地执行,如果存在一个活动事务,则抛出异常 6 REQUIRES_NEW 总是开启一个新的事务。...,则在嵌套事务内执行;如果当前方法没有事务,则与required操作类似; 前六个策略类似于EJB CMT,第七个(PROPAGATION_NESTED)是Spring所提供的一个特殊变量。...=true,那么传播给方法B的也为true,执行完自动提交,即使B标注了@Transactional ; 在一个Service内部,事务方法之间的嵌套调用,普通方法和事务方法之间的嵌套调用,都不会开启新的事务...如果是prototype的话,就在insertCodeBear方法中使用getBean方法吧。

    11.7K24

    SpringBoot系列教程之事务传递属性

    200202-SpringBoot系列教程之事务传递属性 对于mysql而言,关于事务的主要知识点可能几种在隔离级别上;在Spring体系中,使用事务的时候,还有一个知识点事务的传递属性同样重要,...本文将主要介绍7中传递属性的使用场景 MANDATORY 需要在一个正常的事务内执行,否则抛异常 使用姿势如下 @Transactional(propagation = Propagation.MANDATORY, rollbackFor...NEVER 总是非事务地执行,如果存在一个活动事务,则抛出异常。 使用姿势如下 /** * 总是非事务地执行,如果存在一个活动事务,则抛出异常。...小结 前面介绍了7中传播属性,下面简单对比和小结一下 事务 特点 REQUIRED 默认,如果存在事务,则支持当前事务;不存在,则开启一个新事务 SUPPORTS 如果存在一个事务,支持当前事务。

    79220
    领券