苍穹外卖day-01

news/2024/11/6 5:04:42 标签: java, springboot

后端环境搭建

创建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
     */
    @Bean
    public 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.niftyadmin.cn/n/5740200.html

相关文章

Ubuntu22.04在Docker下安装Mysql5.7

Ubuntu22.04在Docker下安装Mysql5.7 通常在项目研发阶段为了开发测试方便此处mysql安装在docker下&#xff08;便于移至和扩展比较灵活&#xff09;&#xff0c;必须要注意在生产环境中不推荐直接安装在docker下 打开官网地址&#xff1a;https://hub.docker.com/&#xff08…

asp.net网站项目如何设置定时器,定时获取数据

在 Global.asax.cs 文件中编写代码来初始化和启动定时器。Global.asax.cs 文件定义了应用程序全局事件&#xff0c;比如应用程序的启动和结束。在这里&#xff0c;我们将在应用程序启动时初始化和启动定时器。 using System; using System.Timers;public class Global : Syste…

(C++回溯算法)微信小程序“开局托儿所”游戏

问题描述 给定一个矩阵 A ( a i j ) m n \bm A(a_{ij})_{m\times n} A(aij​)mn​&#xff0c;其中 a i j ∈ { 1 , 2 , ⋯ , 9 } a_{ij}\in\{1,2,\cdots,9\} aij​∈{1,2,⋯,9}&#xff0c;且满足 ∑ i 1 m ∑ j 1 n a i j \sum\limits_{i1}^m\sum\limits_{j1}^na_{ij} i…

web开发Django+vue3

返回验证码图片 后端&#xff1a;返回Http对象&#xff0c;content_type设置为image # 验证码测试视图函数 def get_captcha(request):img, code generate_captcha() # 生成验证码request.session[captcha_code] code # 将验证码保存到session中buf BytesIO() # 创建一…

[spark面试]spark与mapreduce的区别---在DAG方面

1、spark中的task是以线程实现的&#xff0c;而mapreduce中是以进程实现的。 进程的频繁启动和停止会增加资源的消耗。 2、spark中支持DAG&#xff0c;而mapreduce不支持DAG DAG的使用&#xff1a;为什么支持DAG会更加高效 1&#xff09;、在DAG图中&#xff0c;会将一个job…

Linux 服务器使用指南:从入门到登录

&#x1f31f;快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 &#x1f31f; &#x1f6a9;博主致力于用通俗易懂且不失专业性的文字&#xff0c;讲解计算机领域那些看似枯燥的知识点&#x1f6a9; 目录 一…

docker-ce-stable‘ 下载元数据失败 : Cannot download repomd.xml: Cannot download

看起来你在尝试安装 containerd.io-1.6.32 时遇到了问题&#xff0c;因为 docker-ce-stable 仓库的元数据下载失败。以下是一些可能的解决方案&#xff1a; 1. 检查仓库配置 确保你的 /etc/yum.repos.d/ 目录下的 docker-ce.repo 文件配置正确。你可以尝试手动编辑该文件&…

sqlalchemy连接mysql数据库

create_engine() 是 SQLAlchemy 中用于创建数据库连接的函数&#xff0c;它接受多个参数来配置连接池、日志输出等方面。你提到的 create_engine(DATABASE_URI, echoTrue, pool_size5, max_overflow2, pool_timeout30) 中的各个参数的含义如下&#xff1a; 1. DATABASE_URI 意…