- 持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情
今天讲这个 事务的失效场景。简单说一下这个事务
要么都成功,要么都不成功。简单直接
技术选型
springboot+MySQL+mybatis+丝袜哥(swagger)
先看看表数据
测试类
@Test
void transactional1() {
transactionalEnd.test1();
}
方法结构
/**
* 功能描述:事务的失效场景
*
* @author Songxianyang
* @date 2022-06-24 21:25
*/
@Service
public class TransactionalEndImpl implements TransactionalEnd {
@Resource
private IIntEndScaleForecastMapper iIntEndScaleForecastMapper;
@Override
@Transactional
public void test1() {
test2();
test3();
test4();
// 模拟异常
int i = 1 / 0;
}
@Override
public void test2() {
IntEndScaleForecastEntity entity = new IntEndScaleForecastEntity();
entity.setId(UUID.randomUUID().toString());
entity.setSubProjectName("项目1");
iIntEndScaleForecastMapper.insertIgnoreNull(entity);
}
@Override
public void test3() {
IntEndScaleForecastEntity entity = new IntEndScaleForecastEntity();
entity.setId(UUID.randomUUID().toString());
entity.setSubProjectName("项目2");
iIntEndScaleForecastMapper.insertIgnoreNull(entity);
}
private void test4() {
IntEndScaleForecastEntity entity = new IntEndScaleForecastEntity();
entity.setId(UUID.randomUUID().toString());
entity.setSubProjectName("项目3");
iIntEndScaleForecastMapper.insertIgnoreNull(entity);
}
}
事务失效场景1:private 修饰方法 失效(回头分析源码)再给大家解释
仔细看直接飘红了 编译器提示您这样写有问题
事务失效场景2:final 关键字
仔细看直接飘红了 编译器提示您这样写有问题
失效场景之方法内部调用
声明:test1去调用test2 以此类推
-
- test1 有事务注解 test 2 没有事务注解(不关心是否是什么修饰) 生效
-
- test1 没事务注解 test2 有事务注解 不生效
-
- test1 没事务注解 test2 没事务注解 不生效
-
- test1 有事务注解 test3 有事务注解 生效
方法的内部调用就上升到事务的传播行为了,其实 UP主也要学习一下这个事务的传播行为哈哈 今天先不讲这个哈!
行了 下一篇接着写
- 面向礼品编写博客,哈哈
参考文献:
在企业级开发过程中我发现有位同事用select * from where 条件 for update
都是不错的文章