当前位置:网站首页>@Transactional 事务调用与生效场景总结
@Transactional 事务调用与生效场景总结
2022-08-02 20:53:00 【浮生若梦l】
1.同一个类中 事务publicA掉非事务B B抛异常 AB事务生效(具有传播性)
@Override
@Transactional
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
B();
}
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
//促发异常
if(3/0==1)
System.out.println("");
}
2.同一个类中 事务A掉非事务B A抛异常 AB事务生效
@Override
@Transactional
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
B();
//促发异常
if(3/0==1)
System.out.println("");
}
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
}
3.同一个类中 事务A掉事务B A抛异常 AB事务生效
@Override
@Transactional
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
B();
//促发异常
if(3/0==1)
System.out.println("");
}
@Transactional
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
}
4.同一个类中 事务A掉事务B B抛异常 AB事务生效
@Override
@Transactional
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
B();
}
@Transactional
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
//促发异常
if(3/0==1)
System.out.println("");
}
5.同一个类中 非事务A掉事务B B抛异常 A无事务 B事务不生效
@Override
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
B();
}
@Transactional
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
//促发异常
if(3/0==1)
System.out.println("");
}
6.同一个类中 非事务A掉事务B(通过注入-相当于调用不同类中的B方法) B抛异常 A无事务,B事务生效
@Override
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
userService.B();
}
@Transactional
@Override
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
//促发异常
if(3/0==1)
System.out.println("");
}
7.同一个类中 非事务A掉事务B(通过注入) A抛异常 A无事务,B不促发事务,ab数据都会增加成功
@Override
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
userService.B();
//促发异常
if(3/0==1)
System.out.println("");
}
@Transactional
@Override
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
}
8.同一个类中 事务A掉非事务B(通过注入)A或B抛异常 AB事务生效 (事务传播性)
@Transactional
@Override
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
userService.B();
//促发异常
if(3/0==1)
System.out.println("");
}
@Override
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
}
总结:1.事务A掉B ,AB都有事务(事务传播性)2.非事务A掉事务B,A都无事务,B只有通过注入(AOP)方式调用的时候,B的事务才生效。3.private不能加事务 4.声明式事务如果要细化,可以拆分方法
边栏推荐
猜你喜欢
随机推荐
Vscode快速入门、 插件安装、插件位置、修改vscode默认引用插件的路径、在命令行总配置code、快捷键
Li Mu hands-on learning deep learning V2-bert and code implementation
Common tools and test methods for interface testing (Introduction)
ECCV 2022 | ByteTrack: 简单高效的数据关联方法
汉源高科千兆4光4电工业级网管型智能环网冗余以太网交换机防浪涌防雷导轨式安装
sre成长之路
Xcode13.1运行工程报错fatal error: ‘IFlyMSC/IFly.h‘ file not found的问题
Which thread pool does Async use?
The Orsay in Informatics (1256: Bouquet for Algernon)
Nervegrowold hands-on learning deep learning V2 - Bert pre training data set and code implementation
apache calcite中关于model文件配置
iframe------------frame-
如何使用windbg查看C#某个线程的栈大小 ?
vscode如何能将输出从OUTPUT改为TERMINAL或者DebugConsole
golang 刷leetcode:将字符串翻转到单调递增
快速构建电脑软件系统 、超好用经典的网页推荐汇总
golang刷leetcode:拼接数组的最大分数
[C题目]力扣234. 回文链表
PLC工作原理动画
.NET性能优化-你应该为集合类型设置初始大小