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

当RuntimeException抛出另一个bean时,JTA不会回滚事务吗?

当RuntimeException抛出另一个bean时,JTA事务默认情况下会回滚。

JTA(Java Transaction API)是Java平台提供的一种用于实现分布式事务处理的API。它允许开发人员在多个资源(如数据库、消息队列等)之间执行原子性、一致性、隔离性和持久性(ACID)的操作。

在JTA事务中,如果发生RuntimeException异常并抛出另一个bean,JTA事务会自动回滚。这是因为RuntimeException及其子类被认为是非受查异常,它们通常表示程序的错误或错误的使用方式,无法被捕获并进行处理。当JTA事务中发生非受查异常时,JTA会将事务标记为回滚状态,并回滚所有已执行的操作,以保证数据的一致性。

JTA事务的回滚是通过抛出一个RollbackException异常来触发的,这会导致事务管理器将事务标记为回滚状态,并在适当的时候回滚事务。

总结:

  • 当RuntimeException抛出另一个bean时,JTA事务会默认回滚。
  • RuntimeException及其子类被视为非受查异常,无法被捕获和处理。
  • JTA事务的回滚是通过抛出RollbackException异常来触发的。

请注意,以上答案仅供参考,具体行为可能会因为使用的JTA实现或框架的不同而有所差异。对于具体情况,请参考相应的文档或与相关厂商/开发者进行进一步交流。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring事务—总结

方法执行成功,则提交事务。如果执行方法中出现异常,则事务。 Spring事务传播 事务传播行为指一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。...单独调用methodB,因为当前没有一个活动的事务,则会抛出异常。 PROPAGATION_REQUIRES_NEW 会开启一个新的事务。如果已经存在一个事务,则先将这个存在的事务挂起。...} Catch(RunTimeException ex) { ts2.rollback();//第二个事务 } finally {...ts1.commit();//提交第一个事务 } catch(RunTimeException ex) { ts1.rollback();//第一个事务 } finally...外层事务失败,会内层事务所做的动作。而内层事务操作失败并不会引起外层事务。 只有外部事务提交了,内部事务才会提交。

3.4K50
  • Spring声明式事务、编程式事务一文打尽

    尽管EJB容器默认行为是在事务发生系统异常(通常是运行时异常)自动,EJB CMT并不会在出现应用异常自动。但是Spring声明式事务的默认行为是允许自定义异常变更策略的。...在默认配置中,Spring框架事务基础机构代码标记事务只会在运行时异常、非检查异常RuntimeException(Error实例默认会导致事务)。...事务框架基础结构捕获一个异常,它会咨询配置的事务规则从而决定是否事务,最强的匹配的规则获胜。...事务超时为底层事务系统的默认超时,如果不支持超时,则为none。 任意RuntimeException触发回,checked 异常则不会导致。...所以如果一个内部事务标记了仅仅的标志会影响到外部事务提交的机会。 但是,一个内部事务设置为仅仅的标记时,外部事务并没有决定本身,所以被内部事务触发回操作不是外部事务所期望的。

    94400

    Spring事务机制详解

    con.commit(); } Catch(RuntimeException ex) { //事务 con.rollback(); } finally {...调用methdA,methodB则加入了methodA的事务中执行。 (3)PROPAGATION_MANDATORY 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。...…… } 单独调用methodB,因为当前没有一个活动的事务,则会抛出异常throw new IllegalTransactionStateException("Transaction propagation...外层事务失败,会内层事务所做的动作。而内层事务操作失败并不会引起外层事务。...同时它需要JTA事务管理器的支持。 使用PROPAGATIONNESTED,外层事务可以引起内层事务。而内层事务的异常并不会导致外层事务,它是一个真正的嵌套事务

    43620

    基于可靠消息方案的分布式事务(二):Java中的事务

    extends Throwable>[] noRollbackFor() default {}; 25 // 不会导致事务的异常类名字数组 26 String[] noRollbackForClassName...默认设置为底层事务系统的超时值,如果底层数据库事务系统没有设置超时值,那么就是none,没有超时限制。 事务 事务规则定义了哪些异常会导致事务而哪些不会。...默认情况下,事务只有在遇到运行时期异常才,而在遇到检查型异常不会。...就是抛出的异常为RuntimeException的子类(Errors也会导致事务),而抛出checked异常则不会导致事务。可以明确的配置在抛出那些异常事务,包括checked异常。...也可以明确定义那些异常抛出不回事务。还可以通过编程的setRollbackOnly()方法来指示一个事务必须,在调用完setRollbackOnly()后所能执行的唯一操作就是

    1.2K60

    spring 事务机制的个人总结

    「丢失」(第一类事务丢失):丢失指A事务提交了,但是B事务事务滚了,A提交成功但是B因为事务滚了A的数据,这时候对于A来说事务就算是丢失了。...幻读是指一个事务A读取某一个范围的数据另一个事务B在这个范围插入行,A事务再次读取这个范围的数据,会产生幻行。...手动抛出异常进行 //if(EXCEPTION_FLAG){ // throw new RuntimeException("手动抛出异常");...允许返回在事务中创建的结果对象, 即域对象或域对象的集合。抛出RuntimeException 被视为强制的异常。 这样的异常会传播到模板的调用者。...嵌套事务意味着可以实现部分事务,但是嵌套的内部事务不会影响外部事务的执行。

    1K10

    Spring源码剖析8:Spring事务概述

    ;即在第一个事务开始读取到一批数据,但此后另一个事务又插入了新数据并提交,此时第一个事务又读取这批数据但发现多了一条,即好像发生幻觉一样。...事务超时 所谓事务超时,就是指一个事务所允许执行的最长时间,如果超过该时间限制但事务还没有完成,则自动事务。...,表示不是只读; rollback-for:需要触发回的异常定义,以“,”分割,默认任何RuntimeException 将导致事务,而任何Checked Exception 将不导致事务;异常名字定义和...:指定事务管理器名字,默认为transactionManager,使用其他名字需要明确指定;proxy-target-class:表示将使用的代码机制,默认false表示使用JDK代理,如果为true...在Spring代理机制下(不管是JDK动态代理还是CGLIB代理),“自我调用”同样不会应用相应的事务属性,其语义和中一样; 默认只对RuntimeException异常回; 在使用Spring代理

    56910

    spring的事物 原

    ts1.commit();//提交第一个事务      } catch(RunTimeException ex){             ts1.rollback();//第一个事务      }...嵌套事务一个非常重要的概念就是内层事务依赖于外层事务。外层事务失败,会内层事务所做的动作。而内层事务操作失败并不会引起外层事务。     ...使用 PROPAGATION_REQUIRES_NEW,内层事务与外层事务就像两个独立的事务一样,一旦内层事务进行了提交后,外层事务不能对其进行。两个事务互不影响。...两个事务不是一个真正的嵌套事务。同时它需要JTA事务管理器的支持。     使用PROPAGATION_NESTED,外层事务可以引起内层事务。...而内层事务的异常并不会导致外层事务,它是一个真正的嵌套事务

    74120

    Spring事务传播属性和隔离级别

    no-rollback-for: 出现什么类型异常不会 java.lang.RuntimeException timeout: 事务超时性 -1 永不超时 设置>=0正整数...7) NESTED 嵌套事务 支持当前事务,新增Savepoint点,与当前事务同步提交或。 嵌套事务一个非常重要的概念就是内层事务依赖于外层事务。外层事务失败,会内层事务所做的动作。...而内层事务操作失败并不会引起外层事务。...使用PROPAGATION_REQUIRES_NEW,内层事务与外层事务就像两个独立的事务一样,一旦内层事务进行了提交后,外层事务不能对其进行。两个事务互不影响。两个事务不是一个真正的嵌套事务。...同时它需要JTA 事务管理器的支持。 使用PROPAGATION_NESTED,外层事务可以引起内层事务。而内层事务的异常并不会导致外层事务,它是一个真正的嵌套事务

    17010

    Spring事务(下)

    异常并将当前事务标记为应该回,即超时后事务被自动 可以使用具体事务管理器实现的defaultTimeout属性设置默认的事务超时时间,如DataSourceTransactionManager....setDefaultTimeout(10) 规则 spring事务管理器会捕捉任何未处理的异常,然后依据规则决定是否抛出异常的事务 默认配置下,Spring只有在抛出的异常为运行时unchecked...异常事务,也就是抛出的异常为RuntimeException的子类(Errors也会导致事务),而抛出checked异常则不会导致事务。...可以明确的配置在抛出那些异常事务,包括checked异常。...也可以明确定义那些异常抛出不回事务 如何改变默认规则: 让checked例外也:在整个方法前加上 @Transactional(rollbackFor=Exception.class) 让unchecked

    84830

    @Transactional注解详解

    当在 protected、private 或者默认可见性的方法上使用 @Transactional 注解不会生效的,也不会抛出任何异常 5....,方法中抛出指定异常数组中的异常,则进行事务。...该属性用于设置需要进行的异常类名称数组,方法中抛出指定异常名称数组中的异常,则进行事务。...该属性用于设置不需要进行的异常类数组,方法中抛出指定异常数组中的异常,不进行事务 noRollbackForClassName 参照上方的例子 timeout 该属性用于设置事务的超时秒数,...相反, "可重复读"在同一事务中多次读取数据, 能够保证所读数据一样, 也就是后续读取不能读到另一事务已提交的更新数据 幻读 : 一个事务读到另一个事务已提交的insert数据 其中MySQL默认使用的隔离级别为

    11.7K52

    @Transactional事务注解及请求接口的定义先后执行顺序设计

    相反, "可重复读"在同一事务中多次 读取数据, 能够保证所读数据一样, 也就是后续读取不能读到另一事务已提交的更新数据 幻读 : 一个事务读到另一个事务已提交的insert数据 设置事务手动...2、rollbackFor /** 该属性用于设置需要进行的异常类数组,方法中抛出指定异常数组中的异常,则进行事务 */ 指定单一异常类:@Transactional(rollbackFor...) 3、rollbackForClassName /** 该属性用于设置需要进行的异常类名称数组,方法中抛出指定异常名称数组中的异常,则进行事务 */ 指定单一异常类名称:@Transactional...”,”Exception”}) 4、noRollbackFor /** 该属性用于设置不需要进行的异常类数组,方法中抛出指定异常数组中的异常,不进行事务。...{RuntimeException.class, Exception.class}) 5、noRollbackForClassName /** 该属性用于设置不需要进行的异常类名称数组,方法中抛出指定异常名称数组中的异常

    9610

    Spring事务的提交和机制,以及分布式事务的处理解决方案

    Spring事务的提交和机制如下:提交机制:Spring事务的默认提交机制是自动提交。当事务方法顺利执行完成(没有抛出异常),Spring会自动将事务提交到数据库中保存。...机制:Spring事务机制可以分为两种情况:未检查异常(unchecked exception):当事务方法抛出未检查异常,Spring会自动事务。...在发生未检查异常事务将回并数据库中的操作将被撤销。检查异常(checked exception):当事务方法抛出检查异常,默认情况下Spring不会自动事务。...,Spring事务会根据异常类型是否为检查异常以及是否配置了异常类型来决定是否事务。...未检查异常会自动,而检查异常需要通过配置来决定是否

    98291

    【Spring实战】—— 16 基于JDBC持久化的事务管理

    一个是查询SQL语句,另一个是转换类(用于把查询结果ResultSet转换成POJO类)。   而插入数据的方法中,使用了事务管理。   执行new Integer("hello!")...,由于字符串无法转换到整型出错,会导致事务,写操作。   ...【这里遗留了一个问题,当事务失败,查询语句也无法执行了。难道是因为使用的同一个JdbcTempalte的缘故?这个问题需要看源码探究,暂时记录一下。】   ...1 根据网上搜索的资料:   根据默认规则,如果在执行调方法的过程中抛出了未检查异常,或者显式调用了TransacationStatus.setRollbackOnly() 方法,则事务;如果事务执行完成或者抛出了...但是事务,为什么程序直接停止了呢。   参考   [1] Spring JDBC事务管理   [2] 《Spring in Action》

    66990

    【Spring源码】Spring事务原理

    如果发现外部没有事务,那么就会给reduce()方法新建事务orderService.createOrder()或reduceService.reduce()发生异常事务都会被。...这样的话,由于reduce()是新发起一个事务,且与外部事务是独立的。createOrder()发生异常,如果reduce()事务被提交了,那么是reduce()不会的。...相应的,如果reduce()抛出异常,被createOrder()捕获,那么createOrder()的事务仍然可能提交,取决于外部事务操作。...3.4、PROPAGATION_NESTED 执行到ReduceService.reduce()方法,如果reduce()出现内部异常,则reduce()会滚到他执行之前的SavePoint,因此是不会产生脏数据的...非公共方法:只有公共方法才会被代理,如果事务注解被用于非公共方法,那么事务不会生效。 异常被捕获:如果在事务方法内部抛出异常,但是异常被捕获并处理了,那么事务不会生效。

    17110

    spring事务(上)

    所以,如果一个步骤成功另一个步骤失败对双方都不是好事,如果不管哪一个步骤失败了以后,整个取钱过程都能,也就是完全取消所有操作的话,这对双方都是极好的。...只是在ServiceB.methodB内的任何地方出现异常,ServiceB.methodB将会被不会引起ServiceA.methodA的 单独调用MethodA,在MethodA内又会调用...ts1.commit();//提交第一个事务 } catch(RunTimeException ex) { ts1.rollback();//第一个事务 } finally...如果ServiceB.methodB失败,如果他抛出的异常被ServiceA.methodA的try..catch捕获并处理,ServiceA.methodA事务仍然可能提交;如果他抛出的异常未被ServiceA.methodA...与PROPAGATIONREQUIRESNEW的区别: RequiresNew每次都创建新的独立的物理事务,而Nested只有一个物理事务; Nested嵌套事务或提交不会导致外部事务或提交,但外部事务将导致嵌套事务

    77430

    工作 6 年,@Transactional 注解用的一塌糊涂

    同类内部方法间的调用是 @Transactional 注解失效的重灾区,网上你总能看到方法内部调用另一个同类的方法,这种调用是不会经过代理的,因此事务管理不会生效。但这说法比较片面,要分具体情况。...("b error"); } 如果 testMerge() 方法未开启事务,并且在同类中调用了非事务方法 a() 和事务方法 b(), b() 抛出异常,a() 和 b() 的事务不会生效。...如果 testB() 方法内部发生异常,新事务,但原先挂起的事务不会受影响。这意味着,挂起的事务不会因为新事务而受到影响,也不会因为新事务的失败而回。...也就是说外部事务,子事务会跟着;但子事务不会对外部事务和其他同级事务造成影响。...默认传播特性的情况下 testB() 异常事务加入会导致 testA() ,而挂起的意思是说,testB() 其内部一旦抛出异常,不会影响 testMerge() 中其他 testA() 方法的

    18510

    spring事务的多种方式「建议收藏」

    再说下声明式事务和注解事务的原理:被切面切中或者是加了注解的方法中抛出RuntimeException异常,Spring会进行事务。...默认情况下是捕获到方法的RuntimeException异常,也就是说抛出只要属于运行时的异常(即RuntimeException及其子类)都能;但抛出一个不属于运行时异常事务不会的。...正常情况下,按照正确的编码是不会出现事务失败的。...下面说几点保证事务的方法 (1)如果采用编程式事务,一定要确保切入点表达式书写正确 (2)如果Service层会抛出不属于运行时异常也要能,那么可以将Spring默认的的异常修改为Exception...(rollbackFor=Exception.class) (3)只有非只读事务才能的,只读事务不会的 (4)如果在Service层用了try catch,在catch里面再抛出一个 RuntimeException

    2K40
    领券