CS-Notes 学习笔记
Java 后端 · Spring 与设计模式

Spring 事务有哪些传播行为?REQUIRED 和 REQUIRES_NEW 有什么区别?

先自己想一想,再看参考要点

参考要点

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

学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。