@Transactional失效场景/原因

文章目录

    • 1.@Transactional注解在非public方法上
    • 2.@Transactional使用propagation设置错误(有3种会失效)
    • 3.@Transactional使用rollbackFor设置错误
    • 4.A方法没有使用@Transactional调用了B(有被注解)方法
    • 5.try catch了异常
    • 6.数据库引擎不支持事务


参考地址:https://baijiahao.baidu.com/s?id=1661565712893820457&wfr=spider&for=pc

1.@Transactional注解在非public方法上

在使用SpringAop代理时,TransactionInterceptor事务拦截器会在目标方法前后进行拦截,CglibAopProxy的intecept方法或JdkDynamicAopProxy的invoke方法会间接调用回调资源的一个计算事务属性(computeTransactionAttribute)方法,检查目标方法如果不是public方法,不会获取@Transactional及属性
@Transactional失效场景/原因_第1张图片

2.@Transactional使用propagation设置错误(有3种会失效)

1.PROPAGATION_SUPPORTS:如果当前存在事务,加入事务;如果当前没有事务,非事务执行
2.PROPAGATION_NOT_SUPPORTED:以非事务方式执行;如果当前存在事务,则挂起当前事务
3.PROPAGATION_NEVER:以非事务方式执行;如果当前存在事务抛出异常

3.@Transactional使用rollbackFor设置错误

需要指定Exception的子类

4.A方法没有使用@Transactional调用了B(有被注解)方法

5.try catch了异常

6.数据库引擎不支持事务

你可能感兴趣的:(java,spring)