From 3f3d58622efdc7cfbc5acd50f7fc9e6304fe958e Mon Sep 17 00:00:00 2001
From: wayn <1669738430@qq.com>
Date: Mon, 2 Aug 2021 23:59:32 +0800
Subject: [PATCH] =?UTF-8?q?refactor(=E5=95=86=E5=9F=8E):=20=E6=94=AF?=
=?UTF-8?q?=E4=BB=98=E5=AE=9D=E6=94=AF=E4=BB=98=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 4 +--
readme.md | 106 ++++++++++++++++++++++++++++++++++++++++++++++--------
2 files changed, 93 insertions(+), 17 deletions(-)
diff --git a/pom.xml b/pom.xml
index 703543d..87a7caf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,8 +31,8 @@
wayn111
adoptopenjdk:11-jre-openj9
- 1669738430@qq.com
- he201011
+ 填写你的阿里云账号
+ 填写你的密码,site:https://cr.console.aliyun.com/cn-shanghai/instance/credentials
${java.version}
${java.version}
diff --git a/readme.md b/readme.md
index 4629ef8..d938b53 100644
--- a/readme.md
+++ b/readme.md
@@ -9,7 +9,7 @@ waynboot-mall是一套全部开源的微商城项目,包含一个运营后台
[运营后台项目](https://github.com/wayn111/waynboot-admin)
[h5商城项目](https://github.com/wayn111/waynboot-mobile)
-## waynboot-mall接口项目
+## 技术特点
1. 商城接口代码清晰、注释完善、模块拆分合理
2. 使用Spring-Security进行访问权限控制
@@ -27,9 +27,10 @@ waynboot-mall是一套全部开源的微商城项目,包含一个运营后台
14. 支持商品数据同步elasticsearch操作以及elasticsearch商品搜索
15. RabbitMQ生产者发送消息采用异步confirm模式,消费者消费消息时需手动确认
16. 下单处理过程引入rabbitMQ,异步生成订单记录,提高系统下单处理能力
-17. ...
-
-## 商城技术特点
+17. 引入google jib加速和简化构建Docker应用镜像
+18. ...
+
+## 难点整理
### 1. 库存扣减操作是在下单操作扣减还是在支付成功时扣减?(ps:扣减库存使用乐观锁机制 `where goods_num - num >= 0`)
1. 下单时扣减,这个方案属于实时扣减,当有大量下单请求时,由于订单数小于请求数,会发生下单失败,但是无法防止短时间大量恶意请求占用库存,
造成普通用户无法下单
@@ -40,14 +41,14 @@ waynboot-mall是一套全部开源的微商城项目,包含一个运营后台
下单时配合lua脚本原子的get和decr商品库存数量(这一步就拦截了大部分请求),执行成功后在扣减实际库存
### 2. 首页商品展示接口利用多线程技术进行查询优化,将多个sql语句的排队查询变成异步查询,接口时长只跟查询时长最大的sql查询挂钩
-```
-# 1. 通过创建子线程继承Callable接口
+```java
+// 1. 通过创建子线程继承Callable接口
Callable> bannerCall = () -> iBannerService.list(new QueryWrapper().eq("status", 0).orderByAsc("sort"));
-# 2. 传入Callable的任务给FutureTask
+// 2. 传入Callable的任务给FutureTask
FutureTask> bannerTask = new FutureTask<>(bannerCall);
-# 3. 放入线程池执行
+// 3. 放入线程池执行
threadPoolTaskExecutor.submit(bannerTask);
-# 4. 最后可以在外部通过FutureTask的get方法异步获取执行结果
+// 4. 最后可以在外部通过FutureTask的get方法异步获取执行结果
List list = bannerTask.get()
```
@@ -145,15 +146,37 @@ private static String encryptUserId(String userId, int num) {
### 6. 金刚区跳转使用策略模式
```java
-# 1. 定义金刚位跳转策略接口
+# 1. 定义金刚位跳转策略接口以及跳转枚举类
public interface DiamondJumpType {
List getGoods(Page page, Diamond diamond);
Integer getType();
}
+// 金刚位跳转类型枚举
+public enum JumpTypeEnum {
+ COLUMN(0),
+ CATEGORY(1);
+
+ private Integer type;
+
+ JumpTypeEnum(Integer type) {
+ this.type = type;
+ }
+
+ public Integer getType() {
+ return type;
+ }
+
+ public JumpTypeEnum setType(Integer type) {
+ this.type = type;
+ return this;
+ }
+}
# 2. 定义策略实现类,并使用@Component注解注入spring
+
+// 分类策略实现
@Component
public class CategoryStrategy implements DiamondJumpType {
@@ -171,6 +194,8 @@ public class CategoryStrategy implements DiamondJumpType {
return JumpTypeEnum.CATEGORY.getType();
}
}
+
+// 栏目策略实现
@Component
public class ColumnStrategy implements DiamondJumpType {
@@ -217,22 +242,73 @@ public class DiamondJumpContext {
}
}
-# 4.使用
+# 4.使用,注入DiamondJumpContext对象,调用getInstance方法传入枚举类型
@Autowired
private DiamondJumpContext diamondJumpContext;
@Test
public void test(){
- DiamondJumpType diamondJumpType = diamondJumpContext.getInstance(1);
+ DiamondJumpType diamondJumpType = diamondJumpContext.getInstance(JumpTypeEnum.COLUMN.getType());
}
```
-### 7. google jib docker镜像部署
+### 7. google jib加速和简化docker镜像构建
+
+```xml
+
+
+ com.google.cloud.tools
+ jib-maven-plugin
+ 3.0.0
+
+
+
+ adoptopenjdk:11-jre-openj9
+
+
+
+ registry.cn-shanghai.aliyuncs.com/${aliyun-docker-namespace}/${project.artifactId}
+
+
+
+ ${project.version}
+
+
+
+ 填写你的阿里云账号
+ 填写你的密码 site:https://cr.console.aliyun.com/cn-shanghai/instance/credentials
+
+
+
+
+ 填写项目启动类路劲 eg:com.wayn.AdminApplication
+
+ -Xms812m
+ -Xmx812m
+ -Xss512k
+ -XX:+HeapDumpOnOutOfMemoryError
+ -XX:HeapDumpPath=./
+
+
+
+
+
+
+
+ package
+
+ build
+
+
+
+
+
+```
- todo
## 文件目录
-```java
+```
|-- waynboot-admin-api // 运营后台api模块,提供后台项目api接口
|-- waynboot-common // 通用模块,包含项目核心基础类
|-- waynboot-data // 数据模块,通用中间件数据访问
@@ -245,7 +321,7 @@ public void test(){
|-- pom.xml // maven父项目依赖,定义子项目依赖版本
|-- ...
```
-
+
## 开发部署
```
# 1. 克隆项目