springBoot方法上面添加@Transactional注解与类上面添加@Transactional注解的区别

springBoot方法上面添加@Transactional注解与类上面添加@Transactional注解的区别
强烈推介IDEA2021.1.3破解激活,IntelliJ IDEA 注册码,2021.1.3IDEA 激活码 

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说springBoot方法上面添加@Transactional注解与类上面添加@Transactional注解的区别,希望能够帮助大家进步!!!

@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的作用。

本文来源huayang183,由架构君转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处:https://javajgs.com/archives/18355

发表评论