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

Transaction 注解

类名数组,必须继承自Throwable 导致事务回滚的异常类名字数组 noRollbackFor Class对象数组,必须继承自Throwable 不会导致事务回滚的异常类数组 noRollbackForClassName...类名数组,必须继承自Throwable 不会导致事务回滚的异常类名字数组 Spring 中 @Transactional 的传播行为和隔离级别 不同的位置使用 标注在类前:表示类中的所有方法都进行事务处理...当程序在某些情况下抛出异常时,如果对于这两者不够了解,就可能很难发现而且解决问题。...当ServiceB中抛出了一个异常以后,ServiceB会把当前的transaction标记为需要rollback。...原因是因为当ServiceA调用ServiceB时,serviceB的doSomething是在一个新的transaction中执行的。

79910

一口气说出 6种,@Transactional注解的失效场景

@Transactional 可以作用在接口、类、类方法。 作用于类:当把@Transactional 注解放在类上时,表示所有该类的public方法都配置相同的事务属性信息。...作用于方法:当类配置了@Transactional,方法也配置了@Transactional,方法的事务会覆盖类的事务配置信息。...( 当类A中的 a 方法用默认Propagation.REQUIRED模式,类B中的 b方法加上采用 Propagation.REQUIRES_NEW模式,然后在 a 方法中调用 b方法操作数据库,然而...noRollbackFor属性** noRollbackFor:抛出指定的异常类型,不回滚事务,也可以指定多个异常类型。...,导致@Transactional失效 开发中避免不了会对同一个类里面的方法调用,比如有一个类Test,它的一个方法A,A再调用本类的方法B(不论方法B是用public还是private修饰),但方法A

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

    SpringBoot 使用 @Transactional 注解配置事务

    当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。...虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。...has been marked as rollback-only,因为当ServiceB中抛出了一个异常以后,ServiceB会把当前的transaction标记为需要rollback。...这个属性可以实现: 类A中的a方法加上默认注解@Transactional(propagation = Propagation.REQUIRED),类B中的b方法加上注解@Transactional(...2.不要图省事,将@Transactional放置在类级的声明中,放在类声明,会使得所有方法都有事务。

    11K20

    spring(基础24) Spring注解@Transactional配置事务

    虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。...5、@Transactional 注解属性介绍 value 和 transactionManager 属性 它们两个是一样的意思。当配置了多个事务管理器时,可以使用该属性指定选择哪个事务管理器。...has been marked as rollback-only,因为当ServiceB中抛出了一个异常以后,ServiceB会把当前的transaction标记为需要rollback。...这个属性可以实现: 类A中的a方法加上默认注解@Transactional(propagation = Propagation.REQUIRED),类B中的b方法加上注解@Transactional(...2.不要图省事,将@Transactional放置在类级的声明中,放在类声明,会使得所有方法都有事务。

    70620

    Spring事务管理 - `@Transactional`注解解析

    @Transactional注解原理 @Transactional注解是Spring框架中用于声明事务性操作的注解。它可以应用于方法级别或类级别,并支持多种属性来定义事务的行为。...当一个方法被标记为@Transactional时,Spring会在方法执行前开启一个事务,在方法执行后根据方法执行结果决定是提交事务还是回滚事务。...noRollbackFor: 指定哪些异常不触发事务回滚。 实际项目中的应用 假设我们有一个电子商务平台,涉及用户账户余额的交易。...最佳实践 在使用@Transactional注解时,需要注意以下几个最佳实践: 方法划分: 将业务逻辑划分为适当的事务性方法,避免一个方法过于庞大而引发事务问题。...异常处理: 在方法中捕获并处理异常,或者使用rollbackFor和noRollbackFor属性明确指定哪些异常触发事务回滚。

    70910

    关于Spring事务管理 之 默认事务间调用问题

    事务概念略; 由事务的传播行为我们知道, 如果将方法配置为默认事务(REQUIRED)在执行过程中Spring会为其新启事务(REQUIRES_NEW), 作为一个独立事务来执行....logger.error("业务2处理异常,{}", e.getMessage()); } 问题原因是因为两个service中的方法doService均为默认事务(REQUIRED),...又由于spring的事务回滚依托在异常之上, 当demoService2.doService()出现异常后它将事务标记为回滚....异常抛出后被catch , demoService1.doService 没有接受到里面抛出的异常, 方法继续执行, 执行结束后, 事务提交....但当demoService1在做commit的时候检测到事务被标记为回滚, 与预期不符, 也就是Unexpected 意想不到的 UnexpectedRollbackException: Transaction

    83630

    【Java】已解决:org.springframework.transaction.UnexpectedRollbackException

    导致UnexpectedRollbackException的原因有以下几点: 事务传播行为错误:嵌套事务中的传播行为设置不当,导致回滚时出现意外。...未捕获的异常:在事务中发生了未捕获的运行时异常,导致事务回滚。 手动触发的回滚:在事务中使用了TransactionStatus.setRollbackOnly()方法手动标记事务为仅回滚状态。...} } 错误分析: 异常未正确处理:在catch块中捕获了异常,但没有重新抛出,导致Spring框架认为事务可以继续提交,但实际已被标记为回滚状态。...五、注意事项 在编写和使用Spring事务管理时,需要注意以下几点: 异常处理:确保在事务中捕获异常后重新抛出,以便Spring事务管理器能正确识别并处理事务。...事务传播行为:了解并正确配置事务传播行为,避免因传播行为设置不当导致的事务问题。 日志记录:在事务中添加适当的日志记录,以便在出现问题时能快速定位和解决。

    43410

    Spring中,多个service发生嵌套,事务是怎么样的?

    根据报错信息来看是spring框架中的事务管理报错:事务回滚了,因为它被标记为回滚状态。...报错原因 多层嵌套事务中,如果使用了默认的事务传播方式,当内层事务抛出异常,外层事务捕捉并正常执行完毕时,就会报出rollback-only异常。...spring框架是使用AOP的方式来管理事务,如果一个被事务管理的方法正常执行完毕,方法结束时spring会将方法中的sql进行提交。如果方法执行过程中出现异常,则回滚。...如果内层事务抛出异常e,在内层事务结束时,spring会把事务标记为“rollback-only”。...这时如果外层事务捕捉了异常e,那么外层事务方法还会继续执行代码,直到外层事务也结束时,spring发现事务已经被标记为“rollback-only”,但方法却正常执行完毕了,这时spring就会抛出“org.springframework.transaction.UnexpectedRollbackException

    1K10

    Spring中,多个service发生嵌套,事务是怎么样的?

    根据报错信息来看是spring框架中的事务管理报错:事务回滚了,因为它被标记为回滚状态。...报错原因 多层嵌套事务中,如果使用了默认的事务传播方式,当内层事务抛出异常,外层事务捕捉并正常执行完毕时,就会报出rollback-only异常。...spring框架是使用AOP的方式来管理事务,如果一个被事务管理的方法正常执行完毕,方法结束时spring会将方法中的sql进行提交。如果方法执行过程中出现异常,则回滚。...如果内层事务抛出异常e,在内层事务结束时,spring会把事务标记为“rollback-only”。...这时如果外层事务捕捉了异常e,那么外层事务方法还会继续执行代码,直到外层事务也结束时,spring发现事务已经被标记为“rollback-only”,但方法却正常执行完毕了,这时spring就会抛出“org.springframework.transaction.UnexpectedRollbackException

    9.8K40

    Spring系列之Transactional事务管理

    @Transactional放在一个类前面时,只是对public类型的方法有用 若类中某些方法不需要事务管理时,通过@Transaction(propagation = Propagation.Not_SUPPORTED...例如:@Transactional(readOnly=true) rollbackFor 该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。...,当方法中抛出指定异常名称数组中的异常时,则进行事务回滚。...={"RuntimeException","Exception"}) noRollbackFor 该属性用于设置不需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,不进行事务回滚。...={RuntimeException.class, Exception.class}) noRollbackForClassName 该属性用于设置不需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时

    22310

    Spring注解之事务管理

    @Transactional放在一个类前面时,只是对public类型的方法有用 若类中某些方法不需要事务管理时,通过@Transaction(propagation = Propagation.Not_SUPPORTED...例如:@Transactional(readOnly=true) rollbackFor 该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。..., Exception.class})  续表) 参 数 名 称 功 能 描 述 rollbackForClassName 该属性用于设置需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时...={"RuntimeException","Exception"}) noRollbackFor 该属性用于设置不需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,不进行事务回滚。...RuntimeException.class, Exception.class}) noRollbackForClassName 该属性用于设置不需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时

    70640

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

    1、用于类的上方 当类中的某个方法不需要事务处理时,可以在这个方法上添加: @Transactional(propagation =Propagation.NOT_SUPPORTED) 2、用于具体方法上方...2、rollbackFor /** 该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚 */ 指定单一异常类:@Transactional(rollbackFor...) 3、rollbackForClassName /** 该属性用于设置需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,则进行事务回滚 */ 指定单一异常类名称:@Transactional...”,”Exception”}) 4、noRollbackFor /** 该属性用于设置不需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,不进行事务回滚。...{RuntimeException.class, Exception.class}) 5、noRollbackForClassName /** 该属性用于设置不需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时

    12210

    Spring @Transactional事务管理

    因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。...- rollbackFor 设置需要进行回滚的异常类,当方法中抛出指定异常,则进行事务回滚。...={“RuntimeException”,“Exception”}) - noRollbackFor 设置哪些异常类型 不能 导致事务回滚,当方法中抛出指定异常名称数组中的异常时,不进行事务回滚。...指定单一异常类:@Transactional(noRollbackFor=RuntimeException.class) 指定多个异常类:@Transactional(noRollbackFor={RuntimeException.class...同一个类中,非@Transactional方法调用@Transactional方法 还是动态代理的原因,类内部方法的调用是通过this调用的,不会使用动态代理对象,事务不会回滚。

    42210

    聊聊spring的UnexpectedRollbackException

    序 本文主要研究一下spring的UnexpectedRollbackException UnexpectedRollbackException /** * Thrown when an attempt...,一般是事务嵌套,内层事务抛出了异常,外层事务给catch住了,然后试图提交事务报错 示例 @Transactional public Customer createWithCatch(...方法在执行invocation.proceedWithInvocation()时会catch住异常,然后执行completeTransactionAfterThrowing completeTransactionAfterThrowing...);这里是status.isGlobalRollbackOnly()被标记为true了,因而unexpectedRollback为true 小结 UnexpectedRollbackException继承了...TransactionException,一般是事务嵌套,内层事务抛出了异常,外层事务给catch住了,然后试图提交事务报错UnexpectedRollbackException(Transaction

    26710

    【面试】Spring事务面试考点吐血整理(建议珍藏)

    noRollbackFor/noRollbackForClassName属性,可以配置不导致回滚的异常类型,当遇到这样的未处理异常时,照样提交相关事务。...事务注解在类/方法上 @Transactional注解既可以标注在类上,也可以标注在方法上。当在类上时,默认应用到类里的所有方法。如果此时方法上也标注了,则方法上的优先级高。...事务注解在类上的继承性 @Transactional注解的作用可以传播到子类,即如果父类标了子类就不用标了。但倒过来就不行了。 子类标了,并不会传到父类,所以父类方法不会有事务。...Spring团队建议注解标注在类上而非接口上。 只在public方法上生效? 当采用代理来实现事务时,(注意是代理),@Transactional注解只能应用在public方法上。...当标记在protected、private、package-visible方法上时,不会产生错误,但也不会表现出为它指定的事务配置。可以认为它作为一个普通的方法参与到一个public方法的事务中。

    60330

    【面试】Spring事务面试考点整理

    noRollbackFor/noRollbackForClassName属性,可以配置不导致回滚的异常类型,当遇到这样的未处理异常时,照样提交相关事务。...事务注解在类/方法上 @Transactional注解既可以标注在类上,也可以标注在方法上。当在类上时,默认应用到类里的所有方法。如果此时方法上也标注了,则方法上的优先级高。...事务注解在类上的继承性 @Transactional注解的作用可以传播到子类,即如果父类标了子类就不用标了。但倒过来就不行了。 子类标了,并不会传到父类,所以父类方法不会有事务。...Spring团队建议注解标注在类上而非接口上。 只在public方法上生效? 当采用代理来实现事务时,(注意是代理),@Transactional注解只能应用在public方法上。...当标记在protected、private、package-visible方法上时,不会产生错误,但也不会表现出为它指定的事务配置。可以认为它作为一个普通的方法参与到一个public方法的事务中。

    1.2K20

    聊聊spring的UnexpectedRollbackException

    ,一般是事务嵌套,内层事务抛出了异常,外层事务给catch住了,然后试图提交事务报错示例 @Transactional public Customer createWithCatch(String...给catch住了,最后提交事务则报UnexpectedRollbackException异常源码解析invokeWithinTransactionorg/springframework/transaction...方法在执行invocation.proceedWithInvocation()时会catch住异常,然后执行completeTransactionAfterThrowingcompleteTransactionAfterThrowingorg...);这里是status.isGlobalRollbackOnly()被标记为true了,因而unexpectedRollback为true小结UnexpectedRollbackException继承了...TransactionException,一般是事务嵌套,内层事务抛出了异常,外层事务给catch住了,然后试图提交事务报错UnexpectedRollbackException(Transaction

    32610

    Springboot事务处理

    , 自动扫描加了@Transactional注解的类和方法,加入事务支持。...Transactional注解的几个属性 propagation 事务的传播机制,主要有以下几种,默认是REQUIRED: REQUIRED – 方法A调用时候没有事务新建一个事务,在方法A中调用方法B...REQUIRES_NEW – 方法A调用方法B时,无论是否存在事务都开启一个新事务,这样B方法异常不会导致A的数据回滚。...强制方法不在事务中执行,若有事务,在方法调用到结束阶段先挂起事务。...事务使用 Spring boot是默认启动事务的,只需要在类或者方法上添加@Transactional注解即可,但有时候会发现事务不生效,具体原因可以从以下几个方面找寻: 1、首先要看数据库引擎是否支持注解

    79320

    面试题78:什么时候@Transaction失效?

    @Transactional 应用在非public修饰的方法上 如果在protected、private 修饰的方法上使用 @Transactional 注解,虽然事务无效,但不会有任何报错,这是我们很容犯错的一点...如果在事务中抛出其他类型的异常,但却期望 Spring 能够回滚事务,就需要指定rollbackFor属性。...---- 同一个类中方法调用,导致@Transactional失效 开发中避免不了会对同一个类里面的方法调用,比如有一个类Test,它的一个方法A去调用本类的方法B(不论方法B是用public还是private...回答:其实这还是由于使用Spring AOP代理造成的,因为只有当事务方法被当前类以外的代码调用时,才会由Spring生成的代理对象来管理。...因为当ServiceB中抛出了一个异常以后,ServiceB标识当前事务需要rollback。

    18640
    领券