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

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

导读:一段被try-catch包裹的代码在产线稳定运行了200天忽然发生了异常,而这个异常竟然导致了产线事务。这期间究竟发生了什么?日常在项目过程中该如何避免事务异常?...而造成事务的,竟然是一段被try-cath包裹的代码,一段已经在产线稳定运行了200天的代码,稳定到我们已经把它遗忘了。...当他告诉我一段try-catch的代码造成产线事务,我温柔、耐心地对他说:“一边去,没看我正忙着吗?”,然后他给我甩出了一段代码,用猥琐又真诚的眼睛告诉我,他说的是真的。...我们可以把事务控制机制理解为上图这样一个红色的长长的房间,这个房间是有人看守的,他负责事务的开始、提交,还有一项重要的任务就是监控异常,一旦发现RuntimeException异常直接回整个事务,我们给他一个...Spring捕获异常,正如我们所猜测的,事务将会被设置全局rollback,而最外层的事务方法执行commit操作,这时由于事务状态为rollback,Spring认为不应该commit提交事务,而应该回事务

1.3K20

springboot @Transactional的概念以及实战

使用@Transactional可以极大简化事务管理的复杂性,确保数据的一致性和完整性。概念@Transactional注解负责开启、提交一个事务。...它的工作原理是基于AOP(面向切面编程),在被注解的方法被调用时创建一个事务,并在方法执行结束时根据执行情况提交事务。如果方法正常完成,事务将被提交;如果方法抛出运行时异常事务将被。...readOnly:指示事务是否只读。这个属性可以帮助数据库应用一些优化,比如避免脏读。rollbackFor:定义哪些异常可以触发事务。noRollbackFor:定义哪些异常不会触发事务。...优点简化事务管理:@Transactional提供了一种声明式的方式来管理事务,这意味着开发者可以不必手动控制事务的开启、提交,简化了代码和减少了错误的可能性。...仅限于运行时异常:默认情况下,@Transactional只对运行时异常进行。如果需要对检查型异常进行,需要额外配置,这可能会导致配置错误。

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

Spring的事务管理

事务满足 ACID 原则: 原子性:不可分割,要么全部成功,要么全部失败 一致性:从一个状态到另一个状态 隔离性:正确提交前,可能到结果不应显示给其他事务 持久性:提交,永久保存在数据库中 Java事务...booleanisReadOnly() 隔离规则 脏读:事务提交,被提前读取。 不可重复读:两次读取数据不一致。 幻读:事务不是独立执行时发生的一种非预期现象。...如果当前正有一个事务在运行,则会抛异常 PROPAGATIONRNESTED 如果当前存在一个事务,则该方法会在嵌套事务中运行。嵌套事务可以独立于当前事务进行单独的提交。...设计事务的注意点:事务不能运行太长时间,否则占用太久资源 事务 运行期异常,而检查型异常不会 自定义策略 遇到特定的检查型异常时像运行期异常一样。...事务状态 通过事务管理器获得TransactionStatus实例 控制事务提交时需要应用对应的事务状态 编程式事务管理概述 事务管理器方式 spring事务管理的三个接口 步骤: 获取事务管理器

65830

springboot事物oracle,SpringBoot 事务管理

事务 在讲事务隔离级别和事务传播性之前,先讲一下SpringBoot中,我们平常是怎样控制事务的。...因为在@Transactional注解的方法结束事务就被提交了。...().setRollbackOnly():捕获特定异常或自行判断后手动 3....例:事务1中需要多次读取数据A,第一次读取完成事务2对数据A有操作,事务1再次读取数据A,会读取到事务2操作的结果,但事务2因异常进行了。这时候事务1对数据A就产生了脏读。...; NEVER:非事务方式运行,如当前存在事务,则抛出异常; NESTED:如当前存在事务,则创建一个事务作为当前事务的子事务运行,随当前事务一起提交,当前事务滚子事务,子事务可以独立,当前事务不会

57710

深入理解 Spring 事务原理

(true/false); 执行CRUD 提交事务/事务 con.commit() / con.rollback(); 关闭连接 conn.close(); 使用Spring的事务管理功能,我们可以不再写步骤...(开启正常提交事务异常事务)。...真正的数据库层的事务提交是通过binlog或者redo log实现的。...新建的事务将和被挂起的事务没有任何关系,是两个独立的事务,外层事务失败之后,不能内层事务执行的结果,内层事务失败抛出异常,外层事务捕获,也可以不处理操作 PROPAGATION_SUPPORTS...如果 ServiceB.methodB() 失败,如果他抛出的异常被 ServiceA.methodA() 捕获,ServiceA.methodA() 事务仍然可能提交(主要看B抛出的异常是不是A会异常

47320

Spring 事务管理

:ROLLBACK语句结束事务,放弃从开始的一切变更。 3....3.2 PlatformTransactionManager ( 事务管理器 ) PlatformTransactionManager 负责管理事务的开始,提交。...(读未提交) 允许读取到未提交的数据 允许其他事务读取到这个事务已修改而未提交的数据 READ_COMMITTED (读已提交) 允许读取已提交的数据 这个事务修改且提交,才可用被其他事务读取到。...持有锁到提交时 SERIALIZABLE 持有锁到提交时 持有锁到提交时 5、Spring 事务的传播行为 Spring事务传播机制规定了事务方法和事务方法发生嵌套调用时事务如何进行传递。...创建一个新的事务并挂起当前事务 NOT_SUPPORTED 以非事务方式执行,如果当前存在事务则将当前事务挂起 NEVER 以非事务方式进行,如果存在事务则抛出异常 NESTED 如果当前存在事务,则在嵌套事务内执行

41410

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

1.外部起事务,内部起事务,内外都有Try Catch 内部出错:如果内部事务出错,内部和外部事物全部,外部之前的操作全部不存在,但是之后的操作继续执行。...外部出错:如果外部事物出错,内部和外部事物全部,外部之前的操作全部不存在,但是之后的操作继续执行。 注:如果内部的事务不起事务名称,内部如果出错,将会掉会话中的全部事务,而且报异常。...内部出错:如果内部事务出错,内部和外部事物全部,外部之前的操作全部不存在,但是之后的操作继续执行。...外部出错:如果外部事物在保存点之前出现异常,那么外部和内部所有操作。如果外部事物在保存点之前出现异常,由于保存点已经提交事务,导致外部rollback找不到对应的事务点。...ROLLBACK TRAN将@@TRANCOUNT减为0并回整个事务及其中嵌套事务,无论它们是否已经被提交。因此,嵌套事务中所做的更新被,数据没有任何改变。

2.7K20

Spring的声明式事务管理

现在如果调用 updateAcct() 方法抛出异常,交易订单就会,但帐户更新将会提交给数据库,如清单 12 所示: 清单 12....运行时异常(即非受控异常)自动强制执行整个逻辑工作单元的,但受控异常不会。因此,清单 13 中的代码从事务角度来说毫无用处;尽管看上去它使用事务来维护原子性和一致性,但事实上并没有。...如果电子邮件服务器关闭,您将发送某种形式的 SMTP 受控异常,表示邮件无法发送。如果受控异常引起自动,整个图书订单就会由于电子邮件服务器的关闭全部。...通过禁止自动受控异常,您可以捕获该异常并执行某种纠正操作(如向挂起队列发送消息),然后提交剩余的订单。...就不能改变主意了;惟一可能的结果是在启动事务的方法完成事务

90950

【JavaEE进阶】Spring事务事务传播机制

方法执行过程中,如果没有发生异常,则 Spring 会在方法执行结束提交事务,将对数据库的更改持久化到数据库。 如果方法执行过程中抛出了异常,Spring 将捕获该异常并判断是否需要回事务。...原子性(Atomicity):事务是一个原子操作单元,要么全部执行成功,要么全部失败。它是不可分割的最小操作单位,将多个操作视为一个整体进行处理。...嵌套事务和加入事务的区别: 嵌套事务和加入事务都是事务传播机制的不同实现方式,它们之间有以下区别: 事务范围: 嵌套事务是内部事务运行在外部事务的范围内,可以看作是外部事务的子事务嵌套事务可以独立提交...加入事务是将一个方法或代码片段加入到已有的事务中,与外部事务共享同一个事务范围,不能单独提交事务行为: 嵌套事务具有独立的事务保存点,可以在内部事务中进行操作,而不会影响外部事务的状态。...内部事务执行成功,可以选择提交到外部事务或者继续嵌套使用。 加入事务没有独立的事务保存点,它的所有操作都与外部事务绑定,只有外部事务提交时,才会将加入事务的操作一同提交

30730

Spring JDBC-Spring对事务管理的支持

如果 addCredits()对应的内嵌事务执行失败,事务将回滚到addCredits()方法执行前的点,并不会将整个事务。...内嵌事务是内层事务的一 部分,所以只有外层事务提交时,嵌套事务才能一并提交嵌套事务不能够提交,它必须通过外层事务来完成提交的动作,外层事务也会造成内部事务。...PROPAGATION_REQUIRES_NEW 启动一个新的、和外层事务无关的“内部”事务。该事务拥有自己的独立隔离级别和锁,不依赖于外部事务,独立地提交。...当内部事务开始执行时,外部事务 将被挂起,内务事务结束时,外部事务才继续执行。..., 而 PROPAGATION_NESTED 将创建一个依赖于外层事务的子事务,当外层事务提交时,子事务也会连带提交

56520

Spring-事务

数据库事务是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务事务开始与事务结束之间执行的全部数据库操作组成。...持久性 事务提交,对数据的改变是永久性的。...声明式事务管理:基于AOP实现。对方法前后进行拦截,在方法开始前创建或加入一个事务,执行根据执行情况提交事务。 声明式事务管理优于编程式事务管理,主要是无侵入,低耦合。...Isolation isolation() default Isolation.DEFAULT; // 事务超时时间 默认-1不超时;设置,超时则自动 int timeout() default.../不回异常 默认`RuntimeException`异常 Class<?

48320

使用Transactional 注解实现数据一致性 SpringBoot事务管理

事务是一组操作,它们被视为一个原子单元,要么全部成功执行,要么全部。Spring Boot提供了对事务管理的简单而强大的支持,使开发人员可以更轻松地实现数据的一致性和完整性。...当一个方法被标记为@Transactional时,Spring Boot会在方法开始时创建一个事务,并在方法执行完成根据执行结果决定是提交事务还是事务。...当方法执行完成,根据方法的执行结果决定是提交事务还是事务。 @Transactional注解可以应用在方法级别和类级别上。...} } } 使用@Transactional注解,可以自动管理事务的开始、提交,从而实现数据一致性,在方法执行过程中,如果发生异常或错误,事务将被,保证数据的一致性。...如果在业务操作中发生异常事务可以自动,保证数据的一致性。例如,在一个订单支付的操作中,如果支付过程中发生异常,可以通过事务滚来取消订单并恢复库存。

19510

深入了解分布式事务组件 Seata :AT 模式(二)

当请求链路调用完成,发起方通知 TC 提交分布式事务,进入二阶段调用流程。此时,TC 会根据之前注册的分支事务调到对应参与者去执行对应资源的第二阶段。...TC 是怎么找到分支事务与资源的对应关系呢?每个资源都有一个全局唯一的资源 ID,并且在初始化时用该 ID 向 TC 注册资源。在运行时,每个分支事务的注册都会带上其资源 ID。...阶段 2 完成的是全局事务的最终提交,当全局事务中所有分支事务全部完成并且都执行成功,这时TM会发起全局事务提交,TC收到全全局事务提交消息,会通知各分支事务进行提交;同理,当全局事务中所有分支事务全部完成并且某个分支事务失败了...对服务端来说,等到一阶段完成未抛异常,全局事务的发起方会向服务端申请提交这个全局事务,服务端根据 xid 查询出该全局事务加锁并关闭这个全局事务,目的是防止该事务后续还有分支继续注册上来,同时将其状态从...图片来自https://chenjiayang.me 相对复杂一些,如果发起方一阶段抛异常会向服务端请求该全局事务,服务端会根据 xid 查询出这个全局事务,加锁关闭事务使得后续不会再有分支注册上来

1.4K10

面试官:说说Spring中的事务传播行为

事务传播行为是Spring框架提供的一种事务管理方式,它不是数据库提供的。不知道大家是否听说过“不要在service事务方法中嵌套事务方法,这样会提交多个事务”的说法,其实这是不准确的。...,运行结果: image.png image.png 运行报错了,但是数据却没有掉。...根据定义,inserBatch的事务会被延缓。具体表现就是:后面的10次循环的事务在每次循环结束之后都会提交自己的事务,而inserBatch的事务,要等循环方法走完之后再提交。...但由于第10次循环会抛出异常,则inserBatch的事务,既数据库中不会存在:“初次调用”的记录: 测试代码: @Test public void insertBatchTest() {...所谓嵌套事务,大意就是,外围事务,内嵌事务一定,而内嵌事务可以单独而不影响外围主事务和其他子事务

87010

面试官:说说Spring中的事务传播行为

事务传播行为是Spring框架提供的一种事务管理方式,它不是数据库提供的。不知道大家是否听说过“不要在service事务方法中嵌套事务方法,这样会提交多个事务”的说法,其实这是不准确的。...,运行结果: 运行报错了,但是数据却没有掉。...根据定义,inserBatch的事务会被延缓。具体表现就是:后面的10次循环的事务在每次循环结束之后都会提交自己的事务,而inserBatch的事务,要等循环方法走完之后再提交。...但由于第10次循环会抛出异常,则inserBatch的事务,既数据库中不会存在:“初次调用”的记录: 测试代码: @Test public void insertBatchTest() {...所谓嵌套事务,大意就是,外围事务,内嵌事务一定,而内嵌事务可以单独而不影响外围主事务和其他子事务

12310

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

真正的数据库层的事务提交是通过binlog或者redo log实现的。...新建的事务将和被挂起的事务没有任何关系,是两个独立的事务,外层事务失败之后,不能内层事务执行的结果,内层事务失败抛出异常,外层事务捕获,也可以不处理操作 PROPAGATION_SUPPORTS...PROPAGATION_NESTED 如果一个活动的事务存在,则运行在一个嵌套事务中。如果没有活动事务,则按REQUIRED属性执行。它使用了一个单独的事务,这个事务拥有多个可以的保存点。...a、b、e不回主要看是否抛出异常。 spring 什么情况下进行事务?...Spring、EJB的声明式事务默认情况下都是在抛出unchecked exception才会触发事务 unchecked异常,即运行时异常runntimeException 事务; checked

3.1K10

spring 事务机制的个人总结

「丢失」(第一类事务丢失):丢失指A事务提交了,但是B事务事务滚了,当A提交成功但是B因为事务滚了A的数据,这时候对于A来说事务就算是丢失了。...「规则」:规定了当前的事务会在什么情况下进行,默认情况是按照运行时异常进行,也可以设置指定某些异常不进行,但是需要注意指定异常类必须是Throwable的子类。...rollbackFor:根据指定的Class异常类进行,如果没有设置,默认为运行时异常,但是需要注意必须是able的子类。...每一个事务资源都是独立的,因此可以独立提交,外部事务同样不受内部事务状态的影响,内部事务的锁在完成立即释放。...嵌套事务意味着可以实现部分事务,但是嵌套的内部事务不会影响外部事务的执行。

90410

Java之Spring配置中transactionAttributes的详解

由于开始时使用JPA内部的双向关联,造成各实体内部关联过多,从而影响所有的操作,因此怀疑是因为JPA的关联关系所致。但是去掉关联关系的效果不显著。...PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。...PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。 PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。...key="myMethod"〉PROPAGATION_REQUIRED,readOnly,-Exception〈/prop〉 这样的配置,其中: -Exception表示有Exception抛出时,事务...-代表+就代表提交 readonly 就是read only, 设置操作权限为只读,一般用于查询的方法,优化作用.

35620
领券