苍穹外卖day-01

news/2024/11/7 4:03:44/

后端环境搭建

创建git仓库

提交代码

创建gitee远程仓库

开始连接远程仓库

运行sql文件,创建数据库。这里选取的可视化工具是navicat

编译一下项目

运行项目

登录的账号和密码在数据库中的emploee表中

退出前端界面登录后再重新登录,可以从后台清晰看到前端提交过来的数据

在controller层,对着接口点方法的方法上按着ctrl和鼠标左键,会进入service层

对着方法ctrl+alt+b不按鼠标,会进入impl层

此处我们进入impl层

问题:前端发送的请求是如何请求到后端服务器的?

解答:nginx反向代理,将前端发送的动态请求由nginx转发到后端服务器

整个执行过程:

nginx反向代理的好处:

  • 提高访问速度
  • 进行负载均衡:把大量的请求按照我们指定的方式均衡分配给集群中的每台服务器
  • 保证后端服务器的安全

nginx反向代理的配置方式:

负载均衡:

 nginx负载均衡策略:

**nginx 负载均衡策略:**| **名称**   | **说明**                                               |
| ---------- | ------------------------------------------------------ |
| 轮询       | 默认方式                                               |
| weight     | 权重方式,默认为1,权重越高,被分配的客户端请求就越多  |
| ip_hash    | 依据ip分配方式,这样每个访客可以固定访问一个后端服务   |
| least_conn | 依据最少连接方式,把请求优先分配给连接数少的后端服务   |
| url_hash   | 依据url分配方式,这样相同的url会被分配到同一个后端服务 |
| fair       | 依据响应时间方式,响应时间短的服务将会被优先分配       |具体配置方式:**轮询:**```nginx
upstream webservers{server 192.168.100.128:8080;server 192.168.100.129:8080;
}
```**weight:**```nginx
upstream webservers{server 192.168.100.128:8080 weight=90;server 192.168.100.129:8080 weight=10;
}
```**ip_hash:**```nginx
upstream webservers{ip_hash;server 192.168.100.128:8080;server 192.168.100.129:8080;
}
```**least_conn:**```nginx
upstream webservers{least_conn;server 192.168.100.128:8080;server 192.168.100.129:8080;
}
```**url_hash:**```nginx
upstream webservers{hash &request_uri;server 192.168.100.128:8080;server 192.168.100.129:8080;
}
```**fair:**```nginx
upstream webservers{server 192.168.100.128:8080;server 192.168.100.129:8080;fair;
}
```

完善登录功能:

问题:员工表的密码是明文存储,考虑对密码进行加密,提高数据安全性

解决思路:使用MD5加密方式对明文密码进行加密 

在emploeeServiceImpl文件中,使用springboot中的DigestUtils

在Yapi分别创建用户和管理员接口项目,分别导入相关json文件

后端API接口文档swagger使用流程较为繁琐,这里引入Knife4j框架,写入相关依赖

<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.2</version>
</dependency>

在配置类 WebMvcConfiguration 中加入knife4j相关配置

java">    /*** 通过knife4j生成接口文档* @return*/@Beanpublic Docket docket() {ApiInfo apiInfo = new ApiInfoBuilder().title("苍穹外卖项目接口文档").version("2.0").description("苍穹外卖项目接口文档").build();Docket docket = new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo).select().apis(RequestHandlerSelectors.basePackage("com.sky.controller")).paths(PathSelectors.any()).build();return docket;}

设置静态资源映射,否则接口文档页面无法访问

java"> /*** 设置静态资源映射* @param registry*/protected void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}

访问网址 http://localhost:8080/doc.html 即可查看接口文档

Q:通过 Swagger 就可以生成接口文档,那么是不是就不需要 Yapi 了?

  • Yapi 是设计阶段使用的工具,管理和维护接口
  • Swagger 在开发阶段使用的框架,帮助后端开发人员做后端的接口测试

通过注解可以控制生成的接口文档,使接口文档拥有更好的可读性,常用注解如下:

| **注解**          | **说明**                                               |
| ----------------- | ------------------------------------------------------ |
| @Api              | 用在类上,例如Controller,表示对类的说明               |
| @ApiModel         | 用在类上,例如entity、DTO、VO                          |
| @ApiModelProperty | 用在属性上,描述属性信息                               |
| @ApiOperation     | 用在方法上,例如Controller的方法,说明方法的用途、作用 |

http://www.ppmy.cn/news/1544951.html

相关文章

qt QDropEvent详解

1、概述 QDropEvent是Qt框架中用于处理拖放释放事件的一个类。它允许开发者在用户界面中更好地管理和处理拖放操作&#xff0c;从而实现交互式和响应式的应用程序。QDropEvent类提供了处理拖放释放事件所需的方法和信号&#xff0c;使得开发者能够轻松地实现拖放功能&#xff…

Jenkins 构建时候提示超时错误被终止

近期在使用 Jenkins 构建项目的时候&#xff0c;经常性得到错误&#xff1a; - Building for production... Build timed out (after 3 minutes). Marking the build as aborted.当再次重构后&#xff0c;貌似没有问题&#xff0c;等候一段时间后问题又再次出现。 问题和解决…

【深度学习】时间序列预测、分类、异常检测、概率预测项目实战案例

说明&#xff1a;本专栏内容来自于个人学习笔记、以及相关项目的实践与总结。写作目的是为了让读者体会深度学习的独特魅力与无限潜力&#xff0c;以及在各行各业之中的应用与实践。因作者时间精力有限&#xff0c;难免有疏漏之处&#xff0c;期待与读者共同进步。 前言 在当今…

Caffeine 手动策略缓存 put() 方法源码解析

BoundedLocalManualCache put() 方法源码解析 先看一下BoundedLocalManualCache的类图 com.github.benmanes.caffeine.cache.BoundedLocalCache中定义的BoundedLocalManualCache静态内部类。 static class BoundedLocalManualCache<K, V> implements LocalManualCache&…

10万就能买增程车!买车一定要等它

文 | AUTO芯球 作者 | 雷慢 现在千万别买增程车&#xff0c; 不然过不了多久肯定得后悔&#xff0c; 现在的零跑杀疯了&#xff0c; C16、C11和C10已经抢了理想一大批的潜在用户&#xff0c; 而且更劲爆的来了&#xff0c;零跑要搞价格更低的B10、B11、B16系列了&#xf…

React面试基础题大全(all)

前端react面试基础知识&#xff08;II)-CSDN博客 前端react常见面试题目&#xff08;basic)-CSDN博客 为什么 React 中的 props 被认为是只读的&#xff1f; React 中的 props 被认为是只读的&#xff0c;这是为了保证 React 的单向数据流的设计模式&#xff0c;使状态更可预…

【力扣打卡系列】单调栈

坚持按题型打卡&刷&梳理力扣算法题系列&#xff0c;语言为go&#xff0c;Day20 单调栈 题目描述 解题思路 单调栈 后进先出 记录的数据加在最上面丢掉数据也先从最上面开始 单调性 记录t[i]之前会先把所有小于等于t[i]的数据丢掉&#xff0c;不可能出现上面大下面小的…

如何在社媒平台上使用代理IP来保护帐号安全

社媒平台如Facebook、Twitter、Instagram等&#xff0c;不仅是用户分享生活与信息的重要平台&#xff0c;也是各类网络攻击的目标。利用代理IP可以帮助使用者保护帐号安全&#xff0c;防止个人信息外泄和帐号被盗用的风险。 一、为什么需要使用代理IP保护社媒帐号&#xff1f;…