本文主要是对苍穹外卖的技术总结和业务流程总结,包含了Nginx,JWT等常用技术的概述及使用
1.1负载均衡
负载均衡:负载均衡服务器通过一定的调度算法将客户端的流量分发到不同的应用服务器上面,以实现性能的水平扩展及避免单点故障出现。
1.2正向代理
正向代理是指通过代理服务器代理浏览器/客户端去重定向请求访问到目标服务器。
1.3反向代理 – 跨域
反向代理,指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
1.4 Nginx反向代理配置–nginx.conf
特点:固定长度,不可逆
API: DigestUtils.md5DigestAsHex(password.getBytes());
3.1作用:接口文档的在线生成—doc.html
3.2集成:1.导入Knife4j依赖 2.加入配置,设置资源映射 3.使用注解在对应位置
3.3注解:
@Api(tags = “”)—用在类上
@ApiModel—类上
@ApiModelProperty–用在属性上
@ApiOperation(方法上)
4.1 概述:将原始JSON进行安全封装,由Header(令牌类型、签名算法等),载荷(携带信息),签名(防伪)组成
4.2 应用场景 :身份验证、授权、信息交换
4.3 开发流程: 1.导入JWT依赖 2.编写工具类 3.利用工具类下发/解析JWT实现功能
5.1 应用场景:防止未登录就进入界面 验证用户身份 缓存控制
5.2 开发流程:
1.定义一个实现类实现Filter接口,并重写方法(init初始化方法、doFilter拦截到请求时调用、destroy销毁方法)-- 生命周期
2.配置过滤器:加上@WebFliter(urlPatterns = “”)注解,配置拦截器路径
3.启动类中通过@ServletComponentScan开启扫描
4.放行:filterChain.doFilter(servletRequest,servletResponse);
5.3 FilterChain:在WEB应用中异常编写多个过滤器,过滤器按顺序执行
6.1 概念:由Spring框架提供,动态拦截请求,本质是面向切面编程(AOP)的
6.2 应用场景:登录验证,权限验证,日志记录,性能监控……
6.3 开发流程:
1.自定义类实现接口HandlerInterceptor,重写preHandle方法,交给IOC容器管理。
2.自定义拦截器注册类
7.1 @RestControllerAdvice 被用来定义全局异常处理程序和全局响应结果处理程序。
7.2 @ExceptionHandler 用来自定义异常
8.1 概念:将横切关注点与业务逻辑分离,将其通用行为封装至横向模块,以达到对业务逻辑的增强。
8.2 应用场景:记录日志操作、权限管理、事务管理
8.3 操作日志使用案例:1、起步依赖 2、编写自定义注解类,确定使用时间和空间 3、定义切面类(@Aspect),确定通知类型(@Before/@After/@Around),在方法中编写代码 4、根据注解类的限制,在需要使用的方法/类上增加注解进行使用
9.1 概念:基于内存的key-value结构数据库
9.2 应用场景:缓存,消息队列,排行榜,分布式锁……
9.3 数据类型及常用命令:
9.4 用法:1、引入依赖 2、配置redis数据源 3、编写配置类,配置RedisTemplate对象 4、调用RedisTemplate对象,根据相关命令操作redis
10.1 作用:发送Http请求,接收响应数据
10.2 官网:Apache HttpComponents – HttpClient Quick Start
10.3 开发流程:1、创建HttpClient对象 2、创建请求方法的实例,并指定请求URL 3、调用HttpClient对象的execute执行请求 4、释放连接
11.1 开发流程:开发文档
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
12.1 概念:基于注解的缓存功能,简化开发
12.2 应用场景:缓存数据,防止重复请求,实现分布式系统中的数据共享……
12.3 常用注解:
– @EnableCaching 开启缓存 – 加在启动类上
– @Cacheable(cacheNames = “”, key = “spel表达式”)返回缓存数据,无数据则查数据库进行缓存并返回
– @CachePut(value = “”,key = “spel表达式”) 放入缓存
– @CacheEvict(cacheNames = " ",key = “spel”) 删除缓存
12.4 开发流程:
1.引入依赖 2.开启缓存 3.使用注解进行缓存
JdkSerializationRedisSerializer:默认,它使用Java的序列化机制将Java对象序列化为字节数组
StringRedisSerializer :默认,使用String类型作为Redis的key和value的序列化方式。它可以将Java对象转换为字符串,也可以将字符串转换回Java对象
GenericToStringSerializer :可以将任何对象泛化为字符串并序列化
Jackson2JsonRedisSerializer :一种更加轻量级的序列化方式,它仅仅支持JSON格式的序列化和反序列化
GenericJackson2JsonRedisSerializer:使用Jackson库将Java对象序列化为JSON格式的字符串,以便在Redis中存储和检索 — 常用
14.1应用场景:定时推送,系统未支付订单……
14.2开发流程:1.@ EnableScheduling 2.新建测试类交给IOC容器管理 3. @Scheduled(cron = “cron表达式”)
15.1 概念:基于TCP连接的全双工通信网络协议
15.2 应用场景:用于实时通信,实时双向传输数据 – 弹幕、网页聊天…
15.3 开发流程:
16.1 概念:云存储服务,存储文本、图片、视频
16.2 应用场景:上传文件
16.3 开发流程:
1.导入依赖
2.引入工具类Utils
3.编写配置类config,属性实体类properties
4.在配置文件yam中设置endpoint、accessKeyId、accessKeySecret、bucketName
5. 编写文件上传逻辑代码
17.1 概念:指一组原子性的操作序列,这些操作要么全部执行,要么全部不执行
17.2 特性:原子性、一致性、隔离性和持久性
17.3 应用场景:当一组操作需要同时执行时。–金融行业、电商平台、物流行业
17.4 开发流程:在需要事务管理的方法上加注解:@Transactional()
rollbackFor属性:回滚指定类型的异常:@Transactional(rollbackFor =
Exception.class)
Propagation属性 :
事务传播:当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制。
REQUIRED – 【默认值】需要事务,有则加入,无则创建新事务
REQUIRES_NEW --总是创建新事务
Apache ECharts
https://poi.apache.org/components/spreadsheet/quickguide.html#CreateDateCells
19.1概念:操作Excel文件
19.2 应用场景:导出Excel
19.3 开发流程:
1.导入依赖
2.新建文件对象 new XSSFWorkbook();
3.创建Sheet页 excel.createSheet(“”)
4.创建行sheet.createRow(0)—0为第一行
5.创建单元格 row.createCell(0) – row行第一格
6.赋值 setCellValue
7.写出磁盘,关流
通过添加标签来排除某些依赖,从而避免这些依赖传递到子模块中
21.1 概念:注入外部配置的属性
21.2 注解:
21.3 使用:使用在类上,eg: @ConfigurationProperties(prefix = “yam文件对应的路径”)
概述 | Hutool
利用Hutool工具生成验证码,并保存验证码至数据库,方便验证