zoukankan      html  css  js  c++  java
  • springBoot框架方法上面添加@Transactional注解的使用 springBoot框架类上面添加@Transactional注解的使用postgresql数据库

    @Transactional如果在一个方法上面添加@Transactional注解

    查看postgresql数据库当前的事务隔离级别:

     

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

  • 相关阅读:
    高效求解素数
    搭建redis集群
    搭建Spark高可用集群
    redis持久化
    elasticsearch简介
    java反射机制
    hdfs的客户端操作
    hdfs运行机制
    大数据概念
    hive
  • 原文地址:https://www.cnblogs.com/dongyaotou/p/13294549.html
Copyright © 2011-2022 走看看