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

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

导读:一段被try-catch包裹后代码在产线稳定运行了200天后忽然发生了异常,而这个异常竟然导致了产线事务。这期间究竟发生了什么?日常在项目过程该如何避免事务异常?...02 我们来看一下这段导致了产线事务代码,类似于下面这样: @Transactional public void main() { // 假设有多个user操作,需要事务控制...可能有的人和我第一反应一样,是不是最后userOtherProcess方法执行异常造成了methodA事务?...也安排到了这个房间,methodB虽然发生了异常且被try-catch包裹,但逃不过监事火眼金睛,于是他按下了事务按钮。...MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。 NEVER:以非事务方式执行,如果当前存在事务,则抛出异常

1.3K20

群友:事务异常不也抛出了,为什么没catch到而回

上周,我们通过这篇文章《为什么catch了异常,但事务还是滚了?》...但还是收到了很多没有理解反馈,主要是根据前文给出线索去跟踪,是获得到了标示和异常,而让大家不理解是,javax.validation.ConstraintViolationException...异常不是最后也向外抛出了,那么为什么test4里catch没有能够捕获到呢?...其实这个问题并不难解释,下面就通过这篇文章,做个小实验,帮助大家进一步理解catch不到异常原因! 如果你还不了解这篇文章在讨论什么,建议先看之前两篇: 《我来出个题:这个事务会不会?》...所以,前文中我们跟踪事务抛出异常,其实是在test4try-catch块执行完之后才抛出,所以内部这个catch是无法捕获异常,这里完全就是catch了个寂寞。

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

SpingBoot:事务@Transactional注解不生效场景简介及事务

),如果类加了这个注解,那么这个类里面的方法抛出异常,就会,数据库里面的数据也会。...Spring默认抛出了未检查unchecked异常(继承自 RuntimeException 异常)或者 Error才事务;其他异常不会触发回事务。...如果在事务抛出其他类型异常,但却期望 Spring 能够事务,就需要指定rollbackFor属性。...加入在try catch没有throw e 抛出异常,只是简单打印异常,则异常被捕获未抛出异常去终止程序,在trycatch操作数据库语句插入失败,在trycatch上面和下面的数据库相关插入语句成功...,也就是程序成功跑完,数据库不会发生

24510

spring boot唯一性判断不满足后,如何Transactional

在Spring Boot,如果需要在唯一性判断不满足时进行事务,可以通过以下方式实现: 首先,确保你方法添加了@Transactional注解,这会使得该方法在一个数据库事务执行,如果方法中出现任何异常...(如唯一性约束违反导致ConstraintViolationException等),Spring会自动事务。...由于这个方法被@Transactional注解修饰,所以当这个异常抛出时,Spring会自动当前事务所有数据库操作。...在Spring Boot,如果你使用了@Transactional注解,并且在事务方法抛出异常,Spring框架会默认进行。...如果你捕获了异常,并且不重新抛出一个RuntimeException或Error,事务将不会

5700

spring @Transactional 事务注解

NESTED: 如果一个活动事务存在,则运行在一个嵌套事务.如果没有活动事务,则按REQUIRED属性执行.它使用了一个单独事务, 这个事务拥有多个可以保证点.内部事务不会对外部事务造成影响...spring事务规则 指示spring事务管理器一个事务推荐方法是在当前事务上下文内抛出异常。spring事务管理器会捕捉任何未处理异常,然后依据规则决定是否抛出异常事务。...默认配置下,spring只有在抛出异常为运行时unchecked异常时才该事务,也就是抛出异常为RuntimeException子类(Errors也会导致事务),而抛出checked异常不会导致事务...可以明确配置在抛出那些异常事务,包括checked异常。也可以明确定义那些异常抛出时不回事务。...("注释");)不会,即遇到受检查异常(就是非运行时抛出异常,编译器会检查到异常叫受检查异常或说受检查异常)时,需我们指定方式来让事务 要想所有异常都回,要加上 @Transactional

1.7K20

SpringMVC事务和异常

异常 首先了解一下异常组成: RuntimeException() 例如:数组越界异常、空指针异常、(我们在编写之后不会提示让 try catch异常、代码编写错误导致,可避免) 非RuntimeException...() 例如: IO异常、(会提示try catch异常,不是代码编写错误导致,只能抛出) unchecked异常:RuntimeException + Error checked异常:非RuntimeException...() Spring事务机制 Spring通过异常进行事务机制: Spring 默认事务机制,当出现unchecked异常时候,checked异常时候不会; 我们有时为了打印日志...为了事务正常生效:当有try catch后捕获了异常,事务不会, 如果不得不在service层写try catch 需要catch后 throw new RuntimeException 让事务...所以我们service层在添加了try catch日志打印后,抛出runtime类异常需要在controller层进行捕获,捕获之后,在catch编写操作失败后返回值信息。

61610

java事务案例_java事务控制

: public class BizException extends Exception { // 自定义异常 } 上面代码声明式事务在出现异常时候,事务是不会。...在代码我虽然捕获了异常,但是同时我也抛出异常,为什么事务未呢?猜测是异常类型不对,于是开始查询原因,翻看了Spring官方文档,找到了答案。下面是翻译自Spring官网。...在Spring FrameWork 事务框架推荐事务方法是,在当前执行事务上下文中抛出一个异常。...如果异常未被处理,当抛出异常调用堆栈时候,Spring FrameWork 事务框架代码将捕获任何未处理异常,然后并决定是否将此事务标记为。...在默认配置,Spring FrameWork 事务框架代码只会将出现runtime, unchecked 异常事务标记为;也就是说事务抛出异常时RuntimeException或者是其子类

1.6K10

聊一聊使用Spring事物时不生效场景

前言 今天介绍一下Spring事物不生效场景,事物是我们在项目中经常使用,如果是Java的话,基本上都使用Spring事物,不过Spring事物如果使用不当,那么就会导致事物失效或者不回,最终导致数据不一致...如果异常使用不当,那么事物也不会生效,这里异常有两种,一种是我们抛出异常,一种是@Transactional注解所接受异常。...1.如果我们在程序代码自己捕获了异常导致Spring事物捕获不到异常,那么事物也不会生效,如下,exceptionMethod方法捕获了异常并打印异常信息,那么异常不会被Spring事物捕获到,所以事物并不会...@Transactional注解有一个属性rollbackFor,它代表异常,也就是说只有捕获到这种异常事物才会,它默认是RunTimeException。...RunTimeException,所以事物不能,如果我们需要事物,需要让rollbackFor指定异常抛出异常父类或者和自己一样才行,如下所示。

13630

spring@transactional注解作用(spring 事务实现原理)

因此,“只读事务”仅仅是一个性能优化推荐配置而已,并非强制你要这样做不可 spring事务规则 指示spring事务管理器一个事务推荐方法是在当前事务上下文内抛出异常。...spring事务管理器会捕捉任何未处理异常,然后依据规则决定是否抛出异常事务。...默认配置下,spring只有在抛出异常为运行时unchecked异常时才该事务,也就是抛出异常为RuntimeException子类(Errors也会导致事务),而抛出checked异常不会导致事务...可以明确配置在抛出那些异常事务,包括checked异常。也可以明确定义那些异常抛出时不回事务。...不会导致事务异常类数组 noRollbackForClassName 类名数组,必须继承自Throwable 不会导致事务异常类名字数组 用法 @Transactional

66140

一个@Transaction哪里来这么多坑?

但根据之前分析我们知道,实际上在调用saveB方法时,是直接调用目标类saveB方法,在saveB方法前后并不会有事务开启或者提交、等操作,实际流程是下面这样 ?...❝Spring默认抛出了未检查unchecked异常(继承自 RuntimeException 异常)或者 Error才事务;其他异常不会触发回事务,已经执行SQL会提交掉。...如果在事务抛出其他类型异常,但却期望 Spring 能够事务,就需要指定rollbackFor属性。 ❞ 对应代码其实我们上篇文章也分析过了,如下: ?...抛出异常 最后在这里抛出了这个异常。...显示 最大区别在于处理时第二个参数传入是false,这意味着是预期之中,所以在处理完后并不会抛出异常

92340

spring所有的事务管理策略类继承接口分析

事务超时 所谓事务超时,就是指一个事务所允许执行最长时间,如果超过该时间限制但事务还没有完成,则自动事务。...在 TransactionDefinition 以 int 值来表示超时时间,其单位是秒。...spring事务规则 指示spring事务管理器一个事务推荐方法是在当前事务上下文内抛出异常。spring事务管理器会捕捉任何未处理异常,然后依据规则决定是否抛出异常事务。...默认配置下,spring只有在抛出异常为运行时unchecked异常时才该事务,也就是抛出异常为RuntimeException子类(Errors也会导致事务),而抛出checked异常不会导致事务...可以明确配置在抛出那些异常事务,包括checked异常。也可以明确定义那些异常抛出时不回事务。

29300

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

新建事务将和被挂起事务没有任何关系,是两个独立事务,外层事务失败之后,不能内层事务执行结果,内层事务失败抛出异常,外层事务捕获,也可以不处理操作 PROPAGATION_SUPPORTS...a、b、e不回主要看是否抛出异常。 spring 什么情况下进行事务?...Spring、EJB声明式事务默认情况下都是在抛出unchecked exception后才会触发事务 unchecked异常,即运行时异常runntimeException 事务; checked...异常,即Exception可try{}捕获不会.当然也可配置spring参数让其....如果抛出runtime exception 并在你业务方法没有catch到的话,事务会

3.1K10

Spring声明式与编程式事务区别,事务与非事务方法相互调用导致事务不生效问题

❝ Spring 默认抛出了未检查 unchecked 异常(继承自 RuntimeException 异常)或者 Error 才事务;其他异常不会触发回事务,已经执行 SQL 会提交掉。...如果在事务抛出其他类型异常,但却期望 Spring 能够事务,就需要指定 rollbackFor 属性。...在处理时又有下面这段代码 抛出异常 最后在这里抛出了这个异常。...」,所以即使我们在外部事务 catch 了抛出异常,整个事务仍然无法正常提交,并且如果你希望正常提交,Spring 还会抛出一个异常。...这样当提交事务时会进入下面这段代码 显示 最大区别在于处理时第二个参数传入是 false, 这意味着是预期之中,所以在处理完后并不会抛出异常

1.1K41

聊聊Spring事务控制策略以及@Transactional失效问题避坑

当指定rollbackFor 或者rollbackForClassName 之后,方法执行逻辑只有抛出指定异常类型,才会触发事务 其中,rollbackFor支持指定单个或者多个异常类型,只要抛出指定类型异常...,则该取值等价于REQUIRED 事务传播行为,将会影响到事务控制结果,比如最终是在同一事务,一旦遇到异常,所有操作都会被掉,而如果是在多个事务,则某一个事务,不影响已提交其余事务...// catch了可能异常导致DB操作失败时候事务不会触发回 @Transactional public void insertUser() { try { UserEntity...,这样不会触发事务机制 } } 在业务处理逻辑,如果确实需要知晓并捕获相关处理异常进行一些额外业务逻辑处理,如果要保证事务机制生效,最后需要往外抛出 RuntimeException...如下: // catch了指定异常,对外抛出对应类型异常,可触发事务 @Transactional(rollbackFor = DemoException.class) public void insertUser

45220

Spring事务异常需要数据库引擎支持

例:一个方法报异常,另一个方法不会 try { userDao.save(user); userCapabilityQuotaDao.save(capabilityQuota); } catch (...,因为没有任何异常会从业务方法抛出,全被捕获并“吞掉”,导致spring异常抛出触发事务策略失效。...如果在catch代码块采用页面硬编码方式使用spring api对事务做显式,这样写也是可以。...Error是一种unchecked Exception,编译器不会检查Error是否被处理,在程序不用捕获Error类型异常。一般情况下,在程序也不应该抛出Error类型异常。...RuntimeException 是一种Unchecked Exception,即表示编译器不会检查程序是否对RuntimeException作了处理,在程序不必捕获RuntimException类型异常

89410

Spring避坑指南:Spring声明式事务@Transactional避坑

事务坑:Spring实现机制引起 ---- 1、抛出受检异常Exception无法 默认情况下,只有非受检异常RuntimeException、Error发生时,事务才会。...受检异常Exception发生时不会。...#completeTransactionAfterThrowing 默认情况下,非受检异常: 我们可以设置Exception异常类型,来解决受检异常不回问题: @Transactional...3、方法内try catch异常,不再抛给事务框架,不会事务 自己吞掉了异常,Spring框架不会探测到异常。...4、事务多个业务有异步执行,异常抛出,事务不会 事务实现涉及到javaThreadLocal特性,如果异步执行,事务信息丢失或异常丢失,导致事务执行或

55731

Spring事务失效12种场景总结

这样会导致两个方法不在一个线程。获取数据库连接也就不一致,从而是两个不同事务。如果doOtherThing()方法抛出异常,add()方法是不可能。...,那么Spring事务是不会,因为开发者自己捕获了异常,同时没有手动抛出,欢聚还说就是自己把异常吞掉了。...3.手动抛出了别的异常 即使开发者在编写过程,没有手动抛出异常;但是如果出现异常不正确,Spring事务也不会。...,又手动抛出异常:Exception,事务同样不会。...因为Spring事务,默认情况下只会RunTimeException,和Error(错误),对于普通Exception(非运行时异常),它是不会

2K10

深入理解 Spring 事务:入门、使用、原理

因此当 methodB 发生异常时,methodA 内容就不会。用如下代码就可以验证我们所说。...但父方法需要注意子方法抛出异常,避免因子方法抛出异常,而导致父方法。 为了验证 REQUIRES_NEW 事务传播类型特点,我们来做几个测试。...这正符合我们刚刚所说:父子事务是独立,并不会相互影响。 这其实就是我们上面所说:父方法需要注意子方法抛出异常,避免因子方法抛出异常,而导致父方法。...此时父子方法事务时独立,它们都不会相互影响。但父方法需要注意子方法抛出异常,避免因子方法抛出异常,而导致父方法。 NESTED 当前方法存在事务时,子方法加入在嵌套事务执行。...彩蛋 Spring 事务执行过程,如果抛出非 RuntimeException 和非 Error 错误其他异常,那么是不会哦。

2K20
领券