spring中事务传播特性,REQUIRED/REQUIRES_NEW/NESTED
结论
当前方法跟被调用方法不在同一个类中时
- 被嵌套方法传播特性为REQUIRED
- 内外部代码块中有一个发生代码回滚都会导致整体代码回滚。(两个事务为同一个事务)
- 被嵌套方法传播特性为REQUIRES_NEW
- 内部事务与外部事务相互独立
- 被嵌套方法传播特性为NESTED
- 内部事务回滚不会导致外部事务回滚,但是外部事务会导致内部事务回滚。
当前方法跟被调用方法在同一个类中时
- 当前方法有标记事务时,被调用方法的事务传播特性可以不管
- 当前方法没有标记事务时,不论被调用方法是否标记事务,当前方法中执行的代码都没有事务
验证
验证代码
@Service
public class BuyBookService {
@Autowired
private BookDao bookDao;
@Autowired
private UserDao userDao;
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void subBalance(int userId