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

【小家java】Spring事务嵌套引发的血案---Transaction rolled back because it has been marked as rollback-only

been marked as rollback-only,中文翻译为:事务已回滚,因为它被标记成了只回滚。...分析如下: 为什么update持久化生效?...因为addPerson有事务,所以editById理论上也有事务应该回滚才对,但是由于上层方法给catch住了,所以是没有回滚的,所以持久化生效。...因此我们可以得出结论,rollback-only异常,是发生在异常本身才有可能出现,发生在子方法内部是不会出现的。因此这种现象最多是发生在事务嵌套里。...---- 备注一点:如果你catch住后继续向上throw,也是不会出现这种情况的。 ---- 引发了这个血案。这是上面意思呢?

9.4K10

Spring的事务详解

事务在Spring中是如何运作的 在了解嵌套事务之前,可以先看下单个事务在Spring中的处理流程,以便后面可以更清晰地认识嵌套事务的逻辑。...并try-catch异常 子回滚,主不回滚 正常 异常 子不回滚,主回滚 异常 正常 均回滚 supports 如果客户端没有事务服务端也没有事务 如果客户端有事务服务端就加一个事务 mandatcry...如果客户端有事务就报错 NESTED 如果当前存在事务,则在嵌套事务内执行。...为什么一个查询操作还要启用事务支持呢?...如果你想要回滚特定的异常类型的话,可以这样设置: @Transactional(rollbackFor= MyException.class) 事务的不回滚策略 不回滚策略noRollbackFor,用于指定不触发事务回滚的异常类型

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

    SQL命令 ROLLBACK

    描述 ROLLBACK语句将回滚事务,撤消已执行但未提交的工作,减少$TLEVEL事务级别计数器,并释放锁。 ROLLBACK用于将数据库恢复到以前的一致状态。...ROLLBACK回滚当前事务期间完成的所有工作,将$TLEVEL事务级别计数器重置为0,并释放所有锁。 这会将数据库恢复到事务开始之前的状态。...当所有保存点都被回滚或提交,并且事务级别计数器重置为零时,事务就完成了。 如果指定的保存点不存在,或者已经回滚,ROLLBACK将发出SQLCODE -375错误并回滚整个当前事务。...如果事务操作未能成功完成,则会发出SQLCODE -400错误。 不回滚 ROLLBACK操作不影响以下项目: 回滚不会减少默认类的IDKey计数器。...ObjectScript事务处理为嵌套事务提供有限的支持。SQL事务处理为事务内的保存点提供支持。

    55320

    嵌套事务回滚策略_内部事务回滚会导致外部事务回滚

    然后ROLLBACK TRAN被执行。ROLLBACK TRAN将@@TRANCOUNT减为0并回滚整个事务及其中嵌套的事务,无论它们是否已经被提交。...因此,嵌套事务中所做的更新被回滚,数据没有任何改变。 始终牢记,**在嵌套的事务中,只有最外层的事务决定着是否提交内部事务。...ROLLBACK TRAN语句总是属于最外层的事务,并且因此总是回滚整个事务而不论其中打开了多少嵌套事务。正因为此,管理嵌套事务很复杂。...触发器继续执行 ROLLBACK 语句之后的所有其余语句。如果这些语句中的任意语句修改数据,则不回滚这些修改。执行其余的语句不会激发嵌套触发器。   ...因为当回滚嵌套事务时,嵌套的 BEGIN TRANSACTION 语句将被忽略,触发器中发出的 ROLLBACK TRANSACTION 总是回滚过去该触发器本身发出的所有 BEGIN TRANSACTION

    3K20

    spring事务为什么不生效,回滚失效,事务try catch

    新建的事务将和被挂起的事务没有任何关系,是两个独立的事务,外层事务失败回滚之后,不能回滚内层事务执行的结果,内层事务失败抛出异常,外层事务捕获,也可以不处理回滚操作 PROPAGATION_SUPPORTS...PROPAGATION_NESTED 如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点。...注:Spring的默认事务传播特性是PROPAGATION_REQUIRED,MySQL默认的隔离级别是Repeatable-Read 事务的嵌套例子 package com.yudianxx.springBootDemo.transation...); //不回滚 e是另外的事务 // transactionTestService.f(category); //a、b不回滚,f回滚 transactionTestService.g...a、b、e回不回滚主要看是否抛出异常。 spring 什么情况下进行事务回滚?

    3.3K10

    【二十四】springboot整合spring事务详解以及实战

    7:NESTED:支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务。...2、事务发生指定的异常后回滚(rollback-for) 由于Spring事务的回滚会自动回滚发生的runtimeException异常,所以本小结的学习自定义一个自己的异常类型——MyException...直接抛出运行时异常类ArithmeticException,继承至运行时异常类,能回滚。 言归正传,下面学习no-rollback-for属性,设置指定异常不回滚。...3、事务发生指定的异常后不回滚(no-rollback-for) 上面有说到运行时异常都会进行事务处理,demo中的ArithmeticException异常就是runtimeException...,若现在我需要设置即使发生这个异常也不回滚,怎么做呢?

    93110

    【项目实战经验】一文搞懂云数据库PostgreSQL与MySQL实践案例

    it has been marked as rollback only报错解决与解析4.线上环境对roll back only 的处理 5.线上环境对嵌套事务的解决方案 6.11个demo分析事务失效的场景...接口为什么还要进行事务管理?...catch,有异常操作时在外层事务进行处理,且可决定是否回滚,特定的异常也再次处理回顾:事务的失效场景(事务不生效和事务不回滚)3、11个demo分析事务失效的场景@Slf4j@Servicepublic...* spring的事务关联拦截器在抓到B的异常后就会标记rollback-only为true,当A执行完准备提交后,发现rollback-only为true,也会回滚,并抛出异常告诉调用者。...这个例外是unchecked,如果遇到checked意外就不回滚。

    97730

    spring @Transactional 事务注解

    NESTED: 如果一个活动的事务存在,则运行在一个嵌套的事务中.如果没有活动的事务,则按REQUIRED属性执行.它使用了一个单独的事务, 这个事务拥有多个可以回滚的保证点.内部事务回滚不会对外部事务造成影响...其实大家最感到困惑的是REQUIRED_NEW和NESTED两种不同的传播机制,功能类似,都涉及到了事务嵌套的问题,那两者有何区别呢?该如何正确使用这两种模式呢?...由此可知, 两者都是事务嵌套,不同之处在于,内外事务之间是否存在彼此之间的影响;NESTED之间会受到影响,而产生部分回滚,而REQUIRED_NEW则是独立的。...这个例外是unchecked,如果遇到checked意外就不回滚。 用来指明回滚的条件是哪些异常类或者异常类名。用法比较简单,这些不再赘述。...可以明确的配置在抛出那些异常时回滚事务,包括checked异常。也可以明确定义那些异常抛出时不回滚事务。

    1.8K20

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

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

    20810

    SQL SERVER事务处理

    嵌套事务时,该语句将所有内层事务回滚到 最远的 BEGIN TRANSACTION 语句。在这两种情况下,ROLLBACK TRANSACTION 均将 @@TRANCOUNT 系统函数减为 0。...如果在触发器中发出 ROLLBACK TRANSACTION:将回滚对当前事务中的那一点所做的所有数据修改,包括触发器所做的修改。 触发器继续执行 ROLLBACK 语句之后的所有其余语句。...如果这些语句中的任意语句修改数据,则不回滚这些修改。执行其余的语句不会激发嵌套触发器。在批处理中,不执行所有位于激发触发器的语句之后的语句。...(系统将触发器视作隐性嵌套事务。) 在存储过程中,ROLLBACK TRANSACTION 语句不影响调用该过程的批处理中的后续语句; 将执行批处理中的后续语句。...Insert into demo2(name,age) values('lis',2) rollback transaction t1 Note: 在一系列嵌套的事务中用一个事务名给多个事务命名对该事务没有什么影响

    1.8K20

    三问Spring事务:解决什么问题?如何解决?存在什么问题?

    解决什么问题 让我们先从事务说起,“什么是事务?我们为什么需要事务?”。事务是一组无法被分割的操作,要么所有操作全部成功,要么全部失败。...,以使其回滚; isRollbackOnly:查看是否被标记为Rollback-only; isCompleted:查看事务是否已完成(提交或回滚完成)。...TransactionStatus事务对象可被传入到commit方法或rollback方法中,完成事务的提交或回滚。 下面我们通过一个具体实现来理解TransactionStatus的作用。...2.2 大量的异常处理代码 为什么使用JDBC的代码中会需要写这么多的异常处理代码。...下面再看两个由于使用不当容易犯错的两个问题。 3.3 检查异常默认不回滚 在默认情况下,抛出非检查异常会触发回滚,而检查异常不会。

    95520

    Try-Catch包裹的代码异常后,竟然导致了产线事务回滚!

    为了能够开始今天的文章,就这么瞎编吧,总比以“一个没有头发的程序员”开头的好)。当他告诉我一段try-catch的代码造成产线事务回滚后,我温柔、耐心地对他说:“滚一边去,没看我正忙着吗?”...; try { orderService.methodB(); } catch (Exception e) { // order失败了不能影响该方法,不回滚...Spring捕获异常后,正如我们所猜测的,事务将会被设置全局rollback,而最外层的事务方法执行commit操作,这时由于事务状态为rollback,Spring认为不应该commit提交事务,而应该回滚事务...NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 NESTED:支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务。...但如果是读取数据,根本就不需要事务啊?为什么会有这么一个自相矛盾的配置项呢?小九九一脸茫然地摇了摇头。

    1.4K20

    Spring 事务的相关配置、传播行为、隔离级别及注解配置声明式事务

    一、事务的相关配置 1. 添加测试标签 在 中可以进行事务的相关配置: 中的属性: name:指定配置的方法。...timeout:指定超时时间,在限定的时间内不能完成所有操作就会抛异常。默认永不超时 rollback-for:指定某个异常事务回滚,其他异常不回滚。默认所有异常回滚。...no-rollback-for:指定某个异常不回滚,其他异常回滚。默认所有异常回滚。...二、事务的传播行为         事务传播行为是指多个含有事务的方法相互调用时,事务如何在这些方法间传播。         ...NESTED 必须在事务状态下执行,如果没有事务则新建事务,如果当前有事务则创建一个嵌套事务 三、事务的隔离级别         事务隔离级别反映事务提交并发访问时的处理态度,隔离级别越高,数据出问题的可能性越低

    28020

    _Spring 事务的相关配置、传播行为、隔离级别及注解配置声明式事务

    一、事务的相关配置 1. 添加测试标签 在 中可以进行事务的相关配置: 中的属性: name:指定配置的方法。...timeout:指定超时时间,在限定的时间内不能完成所有操作就会抛异常。默认永不超时 rollback-for:指定某个异常事务回滚,其他异常不回滚。默认所有异常回滚。...no-rollback-for:指定某个异常不回滚,其他异常回滚。默认所有异常回滚。...二、事务的传播行为         事务传播行为是指多个含有事务的方法相互调用时,事务如何在这些方法间传播。         ...NESTED 必须在事务状态下执行,如果没有事务则新建事务,如果当前有事务则创建一个嵌套事务 三、事务的隔离级别         事务隔离级别反映事务提交并发访问时的处理态度,隔离级别越高,数据出问题的可能性越低

    18600

    PHP将死。何以为继?

    转向Ruby on Rails 最明显有潜在能力继任PHP的是Ruby on Rails。Ruby是一个新的、干净的语言,具有现代的语言特征,松散、优雅的语法(很像Python)。...Active Record是一种模式,并不是Ruby固有的,在Rails的最新版本里是可选择的,但是对它的使用和这种模式已经深入到了Rails的DNA里了。...我 之前曾解释过为什么我认为这数据库上的ORM不是个好做法,所以我不会再重复解释,但有一点我需要总结的就是你省去了手工写CRUD所获得的效能要大于 ActiveRecord做傻事所损失的效能,要花时间搞清楚它是怎么工作的...代码生成让我想到了Ruby on Rails的一个可能是最根本的问题,就是它并不是一种语言。Ruby是一种语言。...Ruby on Rails很好,但并不比一个PHP之上的类似的MVC框架强多少,更别提由于Ruby自身的效率不高和ActiveRecord的ORM恶搞带来的双重 打击。

    1.5K60
    领券