zoukankan      html  css  js  c++  java
  • Spring事务注解@Transactional初探

    最近在生产中使用了@Transactional注解,遇到了注解失效问题,于是就去逛了一圈,有了一些认识

    1.使用在类或方法,声明要是pulic(不要用在接口),网上一堆都是这个,大家都有了共识,不必废话

    2.如果你使用springboot的话,根本可以不用@EnableTransactionManagement,springboot自己帮你enable所以不用往配置方向排查(如果原生spring那就可以用)

    3.网上有的说的是扫包问题导致事务管理器没有被spring管理失效

    4.可以使用AopUtils.isAopProxy()作为判断依据,如果true,一般会被spring管理,用了这个注解会生效

    5.网上有的说是A方法写了注解,调用了没写注解的B方法导致事务没生效,我一直在测这个东西,发现都写还是没生效,最后灵机一动加在了类上生效了,这可能就是阿里框架写在类上的原因

    贴上本人测试类的代码

    @SpringBootTest
    @RunWith(SpringRunner.class)
    @Transactional(rollbackFor = Exception.class)
    public class TestTransactional {
    @Autowired
    private BaseUserMapper baseUserMapper;

    @Transactional(rollbackFor = Exception.class)
    public void insertSomething(){
    BaseUser user= new BaseUser();
    user.setNickName("测试事务");
    baseUserMapper.insert(user);
    int i = 1/0;
    insertOther();
    }

    public void insertOther(){
    BaseUser user= new BaseUser();
    user.setNickName("测试事务123");
    baseUserMapper.insert(user);
    }

    @Test
    public void testTransaction(){
    insertSomething();
    }
    }

    欢迎大家来跟我讨论第五点,反正我至今测不出来有注解的A方法和没注解的B方法,类上没加注解   没生效的问题。无论加没加都没生效。

    个人盲猜是因为加在类上才会被认识为动态代理对象,才能够使用事务管理器进行管理,才能进行回滚。

    网上很多文章都是cv的,看了都想吐。。。。。。。。。。。。

  • 相关阅读:
    数据库的左右表连接
    数据库索引-索引的优点、缺点、分类、不走索引的情况
    selenium中日期控件的操作方法
    esdoc 自动生成接口文档介绍
    css设置背景图(背景图太大导致图片显示不全)
    k8s调度器及调度队列源码分析
    MIT6.824 2020 Lab1 MapReduce 实现
    git命令
    python3.6、3.9多版本安装共存
    使用蓝鲸平台登录态验证接入第三方系统
  • 原文地址:https://www.cnblogs.com/sjfxdbky/p/14824126.html
Copyright © 2011-2022 走看看