SPRING的事务传播机制

为什么有事务传播机制?
事务在多个方法调用传递的时候,是使用新的事务还是使用父的事务?父方法的回滚对子方法的事务是否存在影响?根据这些情况就出现了事务传播机制。
SPIRNG使用AOP来代理事务控制,针对接口和类,所以在同一个service类的两个方法的调用,传播机制不生效。
SPRING的事务传播机制
  1. PROPAGATION_REQUIRED:
    1. 支持当前事务,如果当前没有事务,则新建事务
    2. 如果当前存在事务,则加入当前事务,合并成一个事务
  2. REQUIRES_NEW
    1. 新建事务,如果当前存在事务,则把当前事务挂起
    2. 这个方法会独立提交事务,不受调用者的事务影响,父级异常,它也是正常提交
  3. NESTED
    1. 如果当前存在事务,它将会成为父级事务的一个子事务,方法结束后并没有提交,只有等父事务借宿才提交
    2. 如果当前没有事务,则新建事务
    3. 如果它异常,父级可以捕获它的异常而不进行回滚,正常提交
    4. 但如果父级异常,它必然回滚
  4. SUPPORTS
    1. 如果当前存在事务,则加入事务
    2. 如果当前不存在事务,则以非事务方式运行,这个和不写没区别
  5. NOT_SUPPORTED
    1. 以非事务方式运行
    2. 如果当前存在事务,则把当前事务挂起
  6. MANDATORY
    1. 如果当前存在事务,则运行在当前事务中
    2. 如果当前无事务,则抛出异常,也即父级方法必须有事务
  7. NEVER
    1. 以非事务方式运行,如果当前存在事务,则抛出异常,即父级方法必须无事务
  8. 通常用的比较多的是PROPAGATION_REQUIRED,REQUIRES_NEW。
 
posted @ 2020-07-27 17:31  嗯哼哈哈哈哈哈  阅读(25)  评论(0)    收藏  举报