0%

关于springboot的@Transtional注解事务

前言

事务有四个特性:

  • 原子性
    在一系列操作中,要么失败,要么成功,一个失败就全部失败,全部成功才是真正的成功
  • 隔离性
    在每个事务单元中,每个单元都是相对独立的,互不影响
  • 一致性
    在每个事务操作之前和操作之后,数据库的数据保持不变
  • 持久性
    在操作完数据库后,数据已经存到磁盘里,即使电源关闭重启,数据依然存在
    ps(以上仅个人理解的,有误请指正)

    关于启如何启动@Transtional

    注解不需要开启,因为spingboot会自动开启事务,
    我们只要在需要事务回滚的方法上添加注解即可
    回滚的方式有两种
  • 手动回滚
    需要自己去捕获异常(try…catch)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    (rollbackFor=Exception.class)

    public void buyStock(String accountName, double money, String stockName, int amount){

    try{
    Account account = new Account();
    account.setName(accountName);
    account.setMoney(money);
    accountService.updateAccount(account,0);
    int a =1/0; // 出现异常的地方
    }catch (Exception e) {
    System.out.println("出现异常");
    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//关键
    e.getMessage();
    }

    Stock stock = new Stock();
    stock.setCount(10);
    stock.setName(stockName);
    stockService.updateStock(stock,1);
    }
  • 自动回滚(抛出异常即可)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
        (rollbackFor = BuyStockException.class)

    public void buyStock(String accountName, double money, String stockName, int amount) throws BuyStockException {
    boolean isBuy = true;
    Account account = new Account();
    account.setName(accountName);
    account.setMoney(money);
    accountService.updateAccount(account,0);
    if(isBuy) {
    throw new BuyStockException("购买股票出现异常");
    }
    Stock stock = new Stock();
    stock.setCount(10);
    stock.setName(stockName);
    stockService.updateStock(stock,1);
    }


    /**
    * @Description BuyStockException
    * @Author YiLong Wu
    * @Date 2020/2/25 16:26
    * @Version 1.0.0
    */
    public class BuyStockException extends Exception {

    public BuyStockException(){
    super();
    }

    public BuyStockException(String message){
    super(message);
    }
    }

-------------本文结束感谢你的阅读---------