SpringBoot整合MySQL事务,实战用法+异常处理

前言

实际开发几乎不用手写 BEGIN/COMMIT,全部使用Spring 声明式事务

本篇带你从零掌握 SpringBoot 事务实战。


一、核心注解

@Transactional

加在方法/类上,自动开启事务、异常自动回滚。


二、实战转账代码

@Service public class AccountService { @Autowired private AccountMapper accountMapper; @Transactional(rollbackFor = Exception.class) public void transfer(){ // A减100 accountMapper.subMoney("A",100); // 模拟异常 int i = 1/0; // B加100 accountMapper.addMoney("B",100); } }

出现异常,事务自动回滚,不会出现单边扣款。


三、新手必踩事务坑

  1. 必须加 rollbackFor = Exception.class,否则默认只回滚运行时异常

  2. 方法必须public

  3. 内部调用事务失效(A方法调用本类B事务方法,无效)

  4. try-catch 捕获异常不抛出,事务不会回滚


四、正确异常处理方式

try{ // 业务 }catch (Exception e){ throw new RuntimeException(e); }

五、总结

  • SpringBoot 事务核心:@Transactional

  • 所有支付、订单、转账必须加事务

  • 注意事务失效四大场景,避免生产事故