本地事务记录

  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());
    }

推荐阅读更多精彩内容