Spring事务
Spring事务
Spring事务的隔离级别
就是数据库的4个隔离级别+1个Spring默认隔离级别
- Spring默认隔离级别:oracle为读已提交,mysql为可重复读
- 读未提交
- 读已提交
- 可重复读
- 序列化
Spring事务的传播级别
有事务A、B,事务A中调用事务B,A为父事务,B为子事务
传播级别用于修饰B
保证同一个事务中
- REQUIRED 支持当前事务,如果不存在 就新建一个(默认)
- SUPPORTS 支持当前事务,如果不存在,就不使用事务
- MANDATORY 支持当前事务,如果不存在,抛出异常
保证没有在同一个事务中
- REQUIRES_NEW 如果有事务存在,挂起当前事务,创建一个新的事务
- NOT_SUPPORTED 以非事务方式运行,如果有事务存在,挂起当前事务
- NEVER 以非事务方式运行,如果有事务存在,抛出异常
- NESTED 如果当前事务存在,则嵌套事务执行(父事务回滚,子事务一定回滚,但是子事务回滚,不影响父事务回滚)
Spring事务什么时候会失效
自调用
- 类中调用本类的方法,解决办法:设置为代理类,由代理类来执行
方法不是public
- @Transactionl(注解方式)只能用于public方法,否则事务会失效
数据库不支持事务
没有交由Spring管理
异常被吃掉,事务不会回滚(或者抛出的异常未被定义,默认为运行时异常)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 柳门竹巷!
评论