事物的传播行为以及应用场景

事物的传播行为有七种,不仅要知道这七种分别是什么意思,还要知道分别适合哪种场景使用。
service1中调用了service2方法,则service2可以定义以下不同事物传播行为

  1. PROPAGATION_REQUIRED
    解释:如果当前存在事物,则加入该事物;如果不存在事物,则创建一个新的事物。该行为一般被设置为默认
    场景:service2要至少保证在一个事物中运行
  2. PROPAGATION_SUPPORTS
    解释:如果当前存在事物,则加入该事物;如果不存在事物,则直接执行
    场景:适合查询方法。这种行为中如果service1启动了一个事物,service2能够加入到这个事物中去,从而能够读取service1当前修改的数据,否则会由于事物未提交无法读取service1修改的数据(隔离级别大于未提交读)
  3. PROPAGATION_MANDATORY
    解释:强制要求当前存在一个事物,如果不存在则抛出异常
    场景:service2需要事物支持但自身又不管理食物提交或回滚,即强制要求前面的方法创建并管理一个事物给它用
  4. PROPAGATION_REQUIRES_NEW
    解释:不管当前是否存在事物,必定创建一个新事物,如果当前存在事物这个事物会被挂起。新事物在层级上与之前的事物是平级的,两者互不干扰
    场景:如service2事物的失败不想影响到service1事物的成功提交,可以使用这个行为
  5. PROPAGATION_NOT_SUPPORTED
    解释:不支持当前事务,若存在则挂起(能不能挂起还得看对应的事务管理器是否支持挂起事物)
    场景:略
  6. PROPAGATION_NEVER
    解释:永远不使用事物,如果存在事物,抛出异常
    场景:略
  7. PROPAGATION_NESTED
    解释:如果不存在事物,则创建一个新的;如果存在事物,则在当前事务的一个嵌套事物中执行,嵌套事物的层级关系是外层事物的子事物,子事物执行的时候,外层事物不会被挂起,且子事物与外层事物共有事物状态(没有隔离)
    场景:将一个大事物分解为多个小事物执行,根据小事物的执行状态决定大事物的执行流程
发布了98 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Mutou_ren/article/details/103049501