关于springboot的@Transtional注解事务
原创大约 1 分钟
关于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);
}
}