目录

  • 1.7种事务传播行为
  • 2.事务使用示例
  • 3.REQUIRES_NEW 事务传播行为使用示例
    • 3.1 事务传播图
    • 3.2 TUserAServiceImpl.java
    • 3.3 TUserBServiceImpl.java

1.7种事务传播行为

Spring 中定义了七种事务传播行为,分别是:(propagation:n.传播,宣传,培养)

  1. REQUIRED:如果当前存在事务,则加入该事务,否则新建一个事务。这是最常见的传播行为,也是默认的传播行为。
  2. SUPPORTS:支持当前事务,如果当前不存在事务,则以非事务方式执行。
  3. MANDATORY:强制要求当前存在事务,如果不存在事务,则抛出异常。(mandatory:adj.强制的)
  4. REQUIRES_NEW:重新开启一个新的事务,如果当前存在事务,则挂起该事务。
  5. NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则挂起该事务。
  6. NEVER:以非事务方式执行操作,如果当前存在事务,则抛出异常。
  7. NESTED:如果当前存在事务,则嵌套事务中执行。嵌套事务是相对于外部事务而言的,它可以独立提交或回滚,但是嵌套事务的提交或回滚并不会对外部事务产生影响。如果外部事务不存在,那么 NESTEDREQUIRED 的效果是一样的。该传播行为只有在使用 JDBC 事务时才有效。

事务传播行为决定了一个方法执行时如何参与到已有的事务中,或者如何创建新的事务。需要根据实际的业务场景和要求来选择合适的事务传播行为。

2.事务使用示例

使用事务传播行为需要在方法上加上 @Transactional 注解,并指定传播行为,例如:

@Transactional(propagation=Propagation.REQUIRED)
public void doSomething() {// ...
}

这样就将 doSomething() 方法设置为在当前存在事务时,加入该事务,如果不存在事务,则创建一个新的事务。如果需要设置其他的传播行为,只需要将 Propagation.REQUIRED 替换成其他传播行为即可。同时,需要保证 @Transactional 注解在方法所在的类上被正确地启用了事务管理。

3.REQUIRES_NEW 事务传播行为使用示例

REQUIRES_NEW 是 Spring 中的一个事务传播行为。

  • 作用: 创建一个新的事务,并暂停当前事务(如果存在)。
  • 使用场景: 可以使用这个传播行为来确保一个方法执行时独立于调用它的方法所在的事务。
  • 场景示例: 日志记录场景。PostgreSQL 同一事务中,如果事务中间有报错,后面的所有SQL都会执行失败。这时我们就非常需要 PRAOPAGATION_REQUIRES_NEW 这种事务传播行为。

3.1 事务传播图

下面是一个使用 REQUIRES_NEW 事务传播行为的示例:

3.2 TUserAServiceImpl.java

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.demo.module.entity.TUser;
import com.demo.module.mapper.TUserMapper;
import com.demo.module.service.TUserAService;
import com.demo.module.service.TUserBService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.time.LocalDateTime;/*** <p>* 用户表 服务实现类* </p>** @author ACGkaka* @since 2021-04-25*/
@Slf4j
@Service
public class TUserAServiceImpl extends ServiceImpl<TUserMapper, TUser> implements TUserAService {@Autowiredprivate TUserBService tUserBService;@Override@Transactional(rollbackFor = Exception.class)public void addUserA() {// 添加用户ATUser user = new TUser(null, "username_aaa", "pwd_aaa", LocalDateTime.now(), LocalDateTime.now());this.save(user);// 调用方法Btry {tUserBService.addUserB();} catch (Exception e) {log.error("addUserA filed. reason: {}", e.getMessage());}}
}

3.3 TUserBServiceImpl.java

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.demo.module.entity.TUser;
import com.demo.module.mapper.TUserMapper;
import com.demo.module.service.TUserBService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;import java.time.LocalDateTime;/*** <p>* 用户表 服务实现类* </p>** @author ACGkaka* @since 2021-04-25*/
@Slf4j
@Service
public class TUserBServiceImpl extends ServiceImpl<TUserMapper, TUser> implements TUserBService {@Override@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)public void addUserB() {// 添加用户BTUser user = new TUser(null, "username_bbb", "pwd_bbb", LocalDateTime.now(), LocalDateTime.now());this.save(user);throw new RuntimeException("抛出异常");}
}

整理完毕,完结撒花~

Spring(1) Spring的7种事务传播行为相关推荐

  1. Spring七种事务传播行为

    事务传播行为 "事务传播行为"描述的是:当一个事务方法被另一个方法调用时,该事务方法如何进行? 是创建新事务?丢弃事务?还是加入到已存在的事务呢? 针对这些情况,Spring框架定 ...

  2. spring 七种事务传播行为

    spring事务传播行为详解 一.什么是事务传播行为? 二.Spring中七种事务传播行为 三.REQUIRED,REQUIRES_NEW,NESTED异同 四.三种Transactional不回滚问 ...

  3. Spring的七种事务传播行为

    一.什么是事务传播行为? 事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何运行. 例如:methodA方法调用methodB方 ...

  4. Spring的7种事务传播机制

    前言 什么是事务? 事务就是用户定义的一系列数据库操作,这些操作可以视为一个完成的逻辑处理工作单元,要么全部执行,要么全部不执行,是不可分割的工作单元.对数据库的增删改查操作 传播机制是什么? 当A调 ...

  5. Spring的7种事务传播行为类型

    1.PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置. 2.PROPAGATION_SUPPORTS:支持当前事务,如 ...

  6. Spring的七种事务传播行为,通俗易懂,绝不笼统,可以背诵,应付面试

    文章目录 什么是事务传播行为 PROPAGATION(propagation)_REQUIRED(required) PROPAGATION_NESTED(nested) PROPAGATION_RE ...

  7. spring事务(Transaction)的七种事务传播行为及五种隔离级别

    1. 首先,说说什么事务(Transaction) 事务,就是一组操作数据库的动作集合.事务是现代数据库理论中的核心概念之一. 如果一组处理步骤或者全部发生或者一步也不执行,我们称该组处理步骤为一个事 ...

  8. Spring的7种事务传播方式

    Spring事务传播行为体现在某个service方法调用另一个service方法,事务该如何进行下去. Spring支持7中事务传播方式,在Propagation类中可以看到,如下: REQUIRED ...

  9. Spring中七种事务传播行为

    事务的传播行为,默认值为 Propagation.REQUIRED.可手动指定事务传播行为,如下: 1.Propagation.REQUIRED 1)若嵌套在事务中,则加入该事务. 2)若没有嵌套在事 ...

最新文章

  1. linux配置java环境变量 转过几个,这个最详细和靠谱
  2. [转]调试AngularJS应用
  3. 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架
  4. Django最佳实践:项目布局
  5. JAVA读锁不使用效果一样_为什么Java的同步集合不使用读/写锁?
  6. android界面设计中用的字体,APP界面设计必备!最全UI设计字体规范
  7. python爬虫刷网课答题_python实践:利用爬虫刷网课
  8. java代码压缩文件
  9. arduino的L298N电机驱动模块
  10. 外派linux运维,请好好善待你身边的Linux运维工程师,因为他们...
  11. (翻译)验证码(Captcha)
  12. 2020-08-29 ---- 美团点评 笔试
  13. numpy.random.normal函数
  14. 唐宇迪学习笔记20:聚类算法——DBSCAN
  15. Python IDLE的下载,安装与使用教程
  16. GRE写作真题——社会与自然
  17. 键盘按8怎么弹出计算机,win8系统键盘太过灵敏打一个字母键出来多个字母怎么办...
  18. Spring官网下载方式
  19. Nand Flash调试日志(6)——时钟配置
  20. 网厨管理java_点菜网---Java开源生鲜电商平台-技术选型(源码可下载)

热门文章

  1. jade模板语法在express中的使用方法
  2. 从韩信点兵和勾股弦说起—— 漫谈基础数学的古今中外
  3. 性能测试的方法有哪些
  4. iOS UITextField文字输入方向
  5. 天勤计算机书籍pdf,考研计算机卷5•2021天勤计算机考研408八套模拟卷.pdf
  6. 国际EPC招标文件进度要求剖析系列1:某国外电厂招标摘要分析
  7. 理财基金行情数据查询
  8. 二元期权技术中最常见止损方法
  9. Vue3.0性能优化之toRaw,markRaw
  10. Linux文件夹解密压缩与解压