位置: IT常识 - 正文
推荐整理分享从阿里规约看Spring事务(阿里规则官方头条),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:阿里规则在哪里看,阿里规则在哪里看,阿里做到p7,2021阿里新规则,阿里规范,阿里规范,阿里规则在哪里看,阿里规范,内容如对您有帮助,希望把文章链接给更多的朋友!
目标:事务失效引发的灾难
如下图(张三--->李四转账)
tips
下订单-------订单支付-----减库存(失败)
超卖现象
代码回忆:
//实现类public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Resourceprivate LogService logService;@Override@Transactional//@Transactional(rollbackFor = Exception.class)public void insert() throws Exception {method1_Test();}//模拟转账@Transactionalprivate void method1_Test() throws Exception {System.out.println(">>>>>>>>>>>进入到业务方法");User user = new User();user.setName("张三");userMapper.insertUser(user);//张三扣减500元addPayment();//模拟李四增加500元(检查异常)} //FileNotFoundException extends IOExceptionprivate void addPayment() throws FileNotFoundException {FileInputStream in = new FileInputStream("a.txt");//模拟检查异常}} ......略如果说你从从事务方法中抛出的是检查异常(io、sql),那么这个时候,Spring将不能进行事务回滚。
是不是很恐怖呢??
所以说,阿里规定1、让检查异常也回滚:你就需要在整个方法前加上@Transactional(rollbackFor=Exception.class)
2、让非检查异常不回滚:需要加入@Transactional(notRollbackFor=RunTimeException.class)
3、不需要事务管理(or 日志丢失)需要加入@Transactional(propagation=Propagation.NOT_SUPPORTED)
课程目标总结
1、解决事务失效:通过源码学习如何让检查异常也回滚(or 运行异常不回滚);从源码角度深入底层原理
2、解决无需事务控制;查询 or 日志记录;通过传播属性如何控制;底层是如何实现的
3、正常的事务执行流程在源码中是如何实现的
1.1 Spring事务总体介绍在Spring中,事务有两种实现方式:
编程式事务管理: 编程式事务管理使用TransactionTemplate可实现更细粒度的事务控制。
申明式事务管理: 基于Spring AOP实现。
其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。
上一篇:最新2022年Auto Cad2019专用破解版windows11-windows12-32位64位下载(附视频教程)免费下载(学生誓词最新2022年)
友情链接: 武汉网站建设