springBoot方法上面添加@Transactional注解与类上面添加@Transactional注解的区别
@Transactionalpublic void updateData(){ aService.updateA();//更新A表 bService.updateB();//更新B表 cService.updateC();//更新C表}假设,如果每一个service只会对应的更新他所对应的这张表,下面这三个方法上面加不加@Transactional效果都是一样的。不会对最终的结果产生影响。P
@Transactional
public void updateData(){
aService.updateA();//更新A表
bService.updateB();//更新B表
cService.updateC();//更新C表
}
假设,如果每一个service只会对应的更新他所对应的这张表,下面这三个方法上面加不加@Transactional效果都是一样的。不会对最终的结果产生影响。
Pubic void updateA(){
//只进行更新A表的操作
}
Pubic void updateB(){
//只进行更新B表的操作
}
Pubic void updateC(){
//只进行更新C表的操作
}
这种架构,的意思是将ABC三张表的更新操作绑定成一个原子,更新的时候,要成功都成功,要失败都失败。
如果将上面的架构换成下面这种模式:
public void updateData(){
aService.updateA();//更新A表
if(1==1){
Throw new BussinessException(“模拟发生异常”);
}
bService.updateB();//更新B表
cService.updateC();//更新C表
}
假设,如果每一个service只会对应的更新他所对应的这张表,下面这三个方法上面加不加@Transactional效果都是一样的。不会对最终的结果产生影响。
Pubic void updateA(){
//只进行更新A表的操作
}
Pubic void updateB(){
//只进行更新B表的操作
}
Pubic void updateC(){
//只进行更新C表的操作
}
我们会发现程序抛出了异常,但是A表成功的更新了数据。
如果我们在类上面添加@Transactional 注解
@Transactional
public class Test{
public void updateData(){
aService.updateA();//更新A表
bService.updateB();//更新B表
cService.updateC();//更新C表
}
}
Pubic void updateA(){
//只进行更新A表的操作 假设A表中有两条三条数据要进行更新操作,
//我在更新第二条数据的时候手动抛出一个异常
}
这个时候,我们进行测试,会发现,所有的数据都不会进行更新,这就是类级别的@Transactional的作用。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)