SpringBoot2.0+MySQL事务回滚/行级锁实现修改商品下单减库存业务
主页:写程序的小王叔叔的博客
支持:点赞👍关注✔️收藏💖
目录
-
一、效果/要求/目的
- 1.目的/解决并发商品库存超卖问题
- 2.要求
- 3.效果
-
二、基础知识/原理
- 1)springboot2.0基础知识,
- 2)MySQL锁:
-
三、实现方式/应用/环境配置
- 3、环境配置:
一、效果/要求/目的
1.目的/解决并发商品库存超卖问题:
实现电商项目中,由于多个用户某一时间段同时下单时,解决购买同一种商品情况下,扣减库存为负的问题。
2.要求:
创建数据库时,mysql的数据库要求:
1 )MySQL表引擎Innodb
2 )SpringBoot2.0+ 开启事务
springboot2.0项目在业务接口中类头出开启事务监控模式(@Transactional)
3 )压测工具Apache Jmeter
java环境下安装压力测试(资源链接:
)
4)测试工具Postman
java环境下安装工具:(资源地址:
)
3.效果
二、基础知识/原理
1)springboot2.0基础知识,jpa使用,a.yml,配置,事务处理,异常回滚等
2)MySQL锁:
实验环境:mysql5.6
存储引擎:InnoDB
使用锁:行级锁
【扩展】:
- MyISAM:它不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。
- InnoDB :InnoDB是一个健壮的事务型存储引擎,这种存储引擎已经被很多互联网公司使用,为用户操作非常大的数据存储提供了一个强大的解决方案。InnoDB就是作为默认的存储引擎。InnoDB还引入了行级锁定和外键约束,在以下场合下,使用InnoDB是最理想的选择:
1.更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。
2.事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。
3.自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。
4.外键约束。MySQL支持外键的存储引擎只有InnoDB。
5.支持自动增加列AUTO_INCREMENT属性。
一般来说,如果需要事务支持,并且有较高的并发读取频率,InnoDB是不错的选择。
- MEMORY:使用MySQL Memory存储引擎的出发点是速度。为得到最快的响应时间,采用的逻辑存储介质是系统内存。虽然在内存中存储表数据确实会提供很高的性能,但当mysqld守护进程崩溃时,所有的Memory数据都会丢失。获得速度的同时也带来了一些缺陷。它要求存储在Memory数据表里的数据使用的是长度不变的格式,这意味着不能使用BLOB和TEXT这样的长度可变的数据类型,VARCHAR是一种长度可变的类型,但因为它在MySQL内部当做长度固定不变的CHAR类型,所以可以使用。
MySQL锁:[
----------- 参考博客]
行锁(Record Locks) 间隙锁(Gap Locks) 临键锁(Next-key Locks)共享锁/排他锁(Shared and Exclusive Locks)
意向共享锁/意向排他锁(Intention Shared and Exclusive Locks)
插入意向锁(Insert Intention Locks)自增锁(Auto-inc Locks)
三、实现方式/应用/环境配置
1、java+maven环境配置(省略)
2、创建springboot2.0+web项目(本博客使用下单减库存模块的代码)
3、环境配置:
1)spingboot2.0.xml配置文件
【扩展】:
数据库方言:MySQL5Dialect 、MySQL55Dialect区别:
参考 [
]2)springboot jpa代码实现
①controller.java ----- CustomerOrderController.java
②业务实现层 ----------------- CustomerOrderService.java
【扩展】:
Springboot注解@Transactional(propagation)
(参考:
)
③接口实现类 - CustomerOrderServiceImpl.java
【扩展】:
①)异常
②)jpa中行级锁使用方法:
行级锁,对于mysql,InnoDB预设的是Row-level Lock,但是,需要明确的指定主键,才会执行行级锁,否则执行的为表锁。
锁解释:[
博客]
④Jpa实现层 - ------WxProductRepository.java
【扩展】:
①)疑问:
实现方式原因:在查询数据同时进行更改数据信息
② @Modifying(clearAutomatically = true) 注解解释:
底层:
3)商品实体层 ------WxProduct.java
以上就是springboot2.0+MySQL行级锁的实现过程及相关原理,提供参考,以后项目可以参考使用。
以上是自己整理的,并测试过,可以直接用
转载声明:本文为博主原创文章,未经博主允许不得转载
⚠️注意⚠️~
💯本期内容就结束了,如果内容有误,麻烦大家评论区指出!
如有疑问❓可以在评论区留言💬或私信留言💬,尽我最大能力🏃♀️帮大家解决👨🏫!
如果我的文章有帮助到您,点赞👍关注💖,您的鼓励是我分享的动力🏃🏃🏃~
- 点赞
- 收藏
- 关注作者
评论(0)