本地事务记录

  1. @Transactional默认只回滚RuntimeException
    而类似IOException这种需要编写代码处理的默认不会回滚, 可通过rollbackFor = Exception.class使得其也会滚
  2. 被catch的异常, 不管是哪一类, 如果不继续往外抛, 都是不会回滚的; 如果要抛出, 看1
  3. 同一个service中的两个方法调用, 假设controller调用add1
    /**
     * add2中的sql也会回滚
     * 因为这里的this指向的不是代理对象而是原始对象
     * 所以不存在事务的增强
     */
    @Transactional(propagation = Propagation.REQUIRED)
    public void add1()
    {
        studentMapper.insert(Student.builder().name("test1").age(26).build());
        this.add2();
        int a = 1 / 0;
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void add2()
    {
        studentMapper.insert(Student.builder().name("test2").age(26).build());
        studentMapper.insert(Student.builder().name("test3").age(26).build());
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。