苍穹外卖项目总结 | 您所在的位置:网站首页 › 技术难点总结 › 苍穹外卖项目总结 |
简介
本文主要是对苍穹外卖的技术总结和业务流程总结,包含了Nginx,JWT等常用技术的概述及使用 文章目录 简介 一、技术点1.Nginx代理和负载均衡2. MD5密码加密3. Swagger – 框架4.JWT5.过滤器Filter – servlet容器6.拦截器Interceptor – IOC容器7.异常处理 – 全局异常处理器8.AOP 切面9.redis非关系型数据库10.HttpClient11.微信小程序12.Spring Cache13.redis 序列化方式14.Spring Task – 任务调度工具15.WebSocket16.阿里云OSS17.事务处理translational18.Apache Echarts19.Apache POI20.排除依赖[email protected]嵌套查询23.验证码 二、工作流程图1.业务功能图2.业务功能图 三、具体业务流程图1.拦截器2. 登录 -- JWT3.公共字段填充—AOP技术4. 新增5.店铺营业状态—redis缓存6.微信小程序登录7.用户端查看菜品—redis手动缓存8.用户查看套餐—spring Cache注解缓存9.添加菜品/套餐至购物车10.用户下单11.用户支付12.订单状态定时修改—spring task13.来单/催单 – web socket14.导出报表 – POI 一、技术点 1.Nginx代理和负载均衡1.1负载均衡 负载均衡:负载均衡服务器通过一定的调度算法将客户端的流量分发到不同的应用服务器上面,以实现性能的水平扩展及避免单点故障出现。 1.2正向代理 正向代理是指通过代理服务器代理浏览器/客户端去重定向请求访问到目标服务器。 1.3反向代理 – 跨域 反向代理,指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。 1.4 Nginx反向代理配置–nginx.conf 2. MD5密码加密特点:固定长度,不可逆 API: DigestUtils.md5DigestAsHex(password.getBytes()); 3. Swagger – 框架3.1作用:接口文档的在线生成—doc.html 3.2集成:1.导入Knife4j依赖 2.加入配置,设置资源映射 3.使用注解在对应位置 3.3注解: @Api(tags = “”)—用在类上 @ApiModel—类上 @ApiModelProperty–用在属性上 @ApiOperation(方法上) 4.JWT4.1 概述:将原始JSON进行安全封装,由Header(令牌类型、签名算法等),载荷(携带信息),签名(防伪)组成 4.2 应用场景 :身份验证、授权、信息交换 4.3 开发流程: 1.导入JWT依赖 2.编写工具类 3.利用工具类下发/解析JWT实现功能 5.过滤器Filter – servlet容器5.1 应用场景:防止未登录就进入界面 验证用户身份 缓存控制 5.2 开发流程: 1.定义一个实现类实现Filter接口,并重写方法(init初始化方法、doFilter拦截到请求时调用、destroy销毁方法)-- 生命周期 2.配置过滤器:加上@WebFliter(urlPatterns = “”)注解,配置拦截器路径 3.启动类中通过@ServletComponentScan开启扫描 4.放行:filterChain.doFilter(servletRequest,servletResponse); 5.3 FilterChain:在WEB应用中异常编写多个过滤器,过滤器按顺序执行 6.拦截器Interceptor – IOC容器6.1 概念:由Spring框架提供,动态拦截请求,本质是面向切面编程(AOP)的 6.2 应用场景:登录验证,权限验证,日志记录,性能监控…… 6.3 开发流程: 1.自定义类实现接口HandlerInterceptor,重写preHandle方法,交给IOC容器管理。 2.自定义拦截器注册类 7.异常处理 – 全局异常处理器7.1 @RestControllerAdvice 被用来定义全局异常处理程序和全局响应结果处理程序。 7.2 @ExceptionHandler 用来自定义异常 8.AOP 切面8.1 概念:将横切关注点与业务逻辑分离,将其通用行为封装至横向模块,以达到对业务逻辑的增强。 8.2 应用场景:记录日志操作、权限管理、事务管理 8.3 操作日志使用案例:1、起步依赖 2、编写自定义注解类,确定使用时间和空间 3、定义切面类(@Aspect),确定通知类型(@Before/@After/@Around),在方法中编写代码 4、根据注解类的限制,在需要使用的方法/类上增加注解进行使用 9.redis非关系型数据库9.1 概念:基于内存的key-value结构数据库 9.2 应用场景:缓存,消息队列,排行榜,分布式锁…… 9.3 数据类型及常用命令: 9.4 用法:1、引入依赖 2、配置redis数据源 3、编写配置类,配置RedisTemplate对象 4、调用RedisTemplate对象,根据相关命令操作redis 10.HttpClient10.1 作用:发送Http请求,接收响应数据 10.2 官网:Apache HttpComponents – HttpClient Quick Start 10.3 开发流程:1、创建HttpClient对象 2、创建请求方法的实例,并指定请求URL 3、调用HttpClient对象的execute执行请求 4、释放连接 11.微信小程序11.1 开发流程:开发文档 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 12.Spring Cache12.1 概念:基于注解的缓存功能,简化开发 12.2 应用场景:缓存数据,防止重复请求,实现分布式系统中的数据共享…… 12.3 常用注解: – @EnableCaching 开启缓存 – 加在启动类上 – @Cacheable(cacheNames = “”, key = “spel表达式”)返回缓存数据,无数据则查数据库进行缓存并返回 – @CachePut(value = “”,key = “spel表达式”) 放入缓存 – @CacheEvict(cacheNames = " ",key = “spel”) 删除缓存 12.4 开发流程: 1.引入依赖 2.开启缓存 3.使用注解进行缓存 13.redis 序列化方式JdkSerializationRedisSerializer:默认,它使用Java的序列化机制将Java对象序列化为字节数组 StringRedisSerializer :默认,使用String类型作为Redis的key和value的序列化方式。它可以将Java对象转换为字符串,也可以将字符串转换回Java对象 GenericToStringSerializer :可以将任何对象泛化为字符串并序列化 Jackson2JsonRedisSerializer :一种更加轻量级的序列化方式,它仅仅支持JSON格式的序列化和反序列化 GenericJackson2JsonRedisSerializer:使用Jackson库将Java对象序列化为JSON格式的字符串,以便在Redis中存储和检索 — 常用 14.Spring Task – 任务调度工具14.1应用场景:定时推送,系统未支付订单…… 14.2开发流程:1.@ EnableScheduling 2.新建测试类交给IOC容器管理 3. @Scheduled(cron = “cron表达式”) 15.WebSocket15.1 概念:基于TCP连接的全双工通信网络协议 15.2 应用场景:用于实时通信,实时双向传输数据 – 弹幕、网页聊天… 15.3 开发流程: 16.阿里云OSS16.1 概念:云存储服务,存储文本、图片、视频 16.2 应用场景:上传文件 16.3 开发流程: 1.导入依赖 2.引入工具类Utils 3.编写配置类config,属性实体类properties 4.在配置文件yam中设置endpoint、accessKeyId、accessKeySecret、bucketName 5. 编写文件上传逻辑代码 17.事务处理translational17.1 概念:指一组原子性的操作序列,这些操作要么全部执行,要么全部不执行 17.2 特性:原子性、一致性、隔离性和持久性 17.3 应用场景:当一组操作需要同时执行时。–金融行业、电商平台、物流行业 17.4 开发流程:在需要事务管理的方法上加注解:@Transactional() rollbackFor属性:回滚指定类型的异常:@Transactional(rollbackFor = Exception.class) Propagation属性 : 事务传播:当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制。 REQUIRED – 【默认值】需要事务,有则加入,无则创建新事务 REQUIRES_NEW --总是创建新事务 18.Apache EchartsApache ECharts 19.Apache POIhttps://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.写出磁盘,关流 20.排除依赖通过添加标签来排除某些依赖,从而避免这些依赖传递到子模块中 21.@ConfigurationProperties21.1 概念:注入外部配置的属性 21.2 注解: @EnableConfigurationProperties开启配置@Value注解只能一个一个的进行外部属性的注入。@ConfigurationProperties可以批量的将外部的属性配置注入到bean对象的属性中,且能注入数组结构21.3 使用:使用在类上,eg: @ConfigurationProperties(prefix = “yam文件对应的路径”) 22.Mysql嵌套查询 时间格式化:date_format(order_time, ‘%Y-%m-%d’) 23.验证码概述 | Hutool 利用Hutool工具生成验证码,并保存验证码至数据库,方便验证 二、工作流程图 1.业务功能图 2.业务功能图 三、具体业务流程图 1.拦截器 2. 登录 – JWT 3.公共字段填充—AOP技术 4. 新增 5.店铺营业状态—redis缓存 6.微信小程序登录 7.用户端查看菜品—redis手动缓存 8.用户查看套餐—spring Cache注解缓存 9.添加菜品/套餐至购物车 10.用户下单 11.用户支付 12.订单状态定时修改—spring task 13.来单/催单 – web socket 14.导出报表 – POI |
CopyRight 2018-2019 实验室设备网 版权所有 |