- @Transactional默认只回滚RuntimeException
而类似IOException这种需要编写代码处理的默认不会回滚, 可通过rollbackFor = Exception.class使得其也会滚
- 被catch的异常, 不管是哪一类, 如果不继续往外抛, 都是不会回滚的; 如果要抛出, 看1
- 同一个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());
}