事务的传播行为

事务的传播行为

事务的传播行为有七种 (我从网上直接拷贝的话,大家可以结合下面的代码理解)
PROPAGATION.REQUIRED-------- 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION.SUPPORTS --------支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION.MANDATORY -------------支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION.REQUIRES NEW ---------- 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION.NOT_SUPPORTED ---------以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION.NEVER -------------- 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION.NESTED – 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,就新建一个事务。

通过代码讲解传播行为

1、创建日志表

CREATE TABLE `logs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `log` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

2、创建logDao和logService

@Repository
public class LogDao {
	@Autowired
	private JdbcTemplate jdbcTemplate;
	/**
	 * 插入日志信息到数据库种
	 */
	public void recordLog(){
		String sql = "insert into logs(log) values(?)";
		jdbcTemplate.update(sql,UUID.randomUUID().randomUUID().toString());
	}
}
@Service
public class LogService {
	@Autowired
	private LogDao logDao;
	
	public void recordLog(){
		logDao.recordLog();
		System.out.println("记录日志成功!");
	}
}

由于不好演示,只能结果先预测讲解

1、PROPAGATION.REQUIRED(默认的事务传播行为)

在这里插入图片描述
在这里插入图片描述

2、PROPAGATION.REQUIRES_NEW(会创建新的事务)

在这里插入图片描述
在这里插入图片描述

3、PROPAGATION.SUPPORTS(可以共用一个事务,如果没有事务,也不会创建)

第一种情况:有默认事务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二种情况:save方法种没有事务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、PROPAGATION.NOT_SUPPORTED(因为它不支持事务,所以即使有事务,它不会共用事务)

在这里插入图片描述
在这里插入图片描述

5、PROPAGATION.MANDATORY(它会共用事务,如果没有事务共用会抛出异常)

在这里插入图片描述
在这里插入图片描述

6、PROPAGATION.NEVER(它不支持事务,如果方法中有事务的存在,它反而会抛出异常)

在这里插入图片描述
在这里插入图片描述

7、PROPAGATION.NESTED(它自己存在事务,如果save方法中有事务的存在,则它会将自己的事务嵌套在save方法的事务中)

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值