Spring 事务有哪些传播行为?REQUIRED 和 REQUIRES_NEW 有什么区别?
先自己想一想,再看参考要点
参考要点
- REQUIRED 是默认值,当前有事务就加入,没有就新建,内外方法一起提交或一起回滚
- REQUIRES_NEW 挂起当前事务、新建一个独立的事务,两者分别提交和回滚,例如无论业务成败都要保存的操作日志,代价是一个线程同时占用两个连接,并发高时可能都在等连接直到超时
- NESTED 在当前事务中建立保存点,内层回滚只回到保存点,外层回滚时内层一起回滚,要事务管理器支持保存点
- REQUIRED 下另一个 Bean 的内层方法抛出 RuntimeException,会把整个事务标记为只能回滚,外层捕获了异常也会回滚并抛出 UnexpectedRollbackException
- SUPPORTS、NOT_SUPPORTED、MANDATORY、NEVER 用得较少