关于springboot的@Transtional注解事务

WuYiLong原创大约 1 分钟javaTranstional

关于springboot的@Transtional注解事务

前言

事务有四个特性:

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

关于启如何启动@Transtional

注解不需要开启,因为spingboot会自动开启事务, 我们只要在需要事务回滚的方法上添加注解即可 回滚的方式有两种

  • 手动回滚 需要自己去捕获异常(try…catch)
(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);
   }
  • 自动回滚(抛出异常即可)
    (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);
    }
}
上次编辑于:
贡献者: wuyilong