基于SpringBoot的外卖项目的优化

基于SpringBoot的外卖项目的优化

  • 1、缓存优化
    • 1.1、缓存短信验证码
      • 问题分析
      • 代码改造
    • 1.2、缓存菜品数据
      • 实现思路
    • 1.3、Spring Cache
      • 介绍
      • 常用注解
        • @CachePut
        • @CacheEvict
        • @Cacheable
      • 使用方式
    • 1.4、缓存套餐数据
      • 实现思路
      • 代码改造
  • 2、读写分离
    • 2.1、主从复制
      • 存在的问题
      • 介绍
      • 配置
        • 配置主库--master
        • 配置从库--slave
    • 2.2、读写分离
      • 背景
      • Sharding-JDBC介绍
      • 案例
    • 2.3、项目中实现读写分离
      • 数据库环境准备
  • 3、Nginx
    • 3.1、概述
      • 介绍
      • 下载和安装
      • 目录结构
    • 3.2、命令
    • 3.3、配置文件的结构
    • 3.4、具体应用
      • 部署静态资源
      • 反向代理
        • 介绍
        • 配置
      • 负载均衡
        • 介绍
        • 配置
        • 负载均衡策略
  • 4、前后端分离
    • 问题
    • 4.1、前后端分离开发
      • 介绍
      • 开发流程
      • 前端技术栈
    • 4.2、YApi/FastApi/Apifox
      • 介绍
      • 使用
    • 4.3、Swagger
      • 介绍
      • 使用
      • 常用注解
    • 4.4、项目部署
      • 部署架构
      • 部署环境说明

申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟
更多学习内容, 欢迎关注我的个人公众号:不懂开发的程序猿

友情链接:
基于SpringBoot的外卖项目(详细开发过程)

1、缓存优化

1.1、缓存短信验证码

问题分析

基于SpringBoot的外卖项目的优化_第1张图片

代码改造

pom.xml


<dependency>
  <groupId>org.springframework.bootgroupId>
  <artifactId>spring-boot-starter-data-redisartifactId>
dependency>

application.yml

基于SpringBoot的外卖项目的优化_第2张图片

基于SpringBoot的外卖项目的优化_第3张图片

基于SpringBoot的外卖项目的优化_第4张图片

基于SpringBoot的外卖项目的优化_第5张图片

1.2、缓存菜品数据

实现思路

基于SpringBoot的外卖项目的优化_第6张图片

把所有的菜品数据缓存到redis中

基于SpringBoot的外卖项目的优化_第7张图片

在这里插入图片描述

如果菜品数据发生了更新和添加操作,就需要清理下redis缓存

基于SpringBoot的外卖项目的优化_第8张图片

基于SpringBoot的外卖项目的优化_第9张图片

1.3、Spring Cache

介绍

基于SpringBoot的外卖项目的优化_第10张图片

常用注解

基于SpringBoot的外卖项目的优化_第11张图片

默认的缓存技术底层是基于map来缓存数据,因此服务停止后,缓存数据就消失了

但是如果采用RedisCache作为缓存,就不会存在这个问题

@CachePut

基于SpringBoot的外卖项目的优化_第12张图片

@CacheEvict

基于SpringBoot的外卖项目的优化_第13张图片

基于SpringBoot的外卖项目的优化_第14张图片

@Cacheable

基于SpringBoot的外卖项目的优化_第15张图片

基于SpringBoot的外卖项目的优化_第16张图片

使用方式

基于SpringBoot的外卖项目的优化_第17张图片

1.4、缓存套餐数据

实现思路

基于SpringBoot的外卖项目的优化_第18张图片

代码改造

pom.xml


<dependency>
  <groupId>org.springframework.bootgroupId>
  <artifactId>spring-boot-starter-cacheartifactId>
dependency>

application.yml

基于SpringBoot的外卖项目的优化_第19张图片

在启动类上开启缓存注解@EnableCaching

基于SpringBoot的外卖项目的优化_第20张图片

在SetmealController的list方法上加入@Cacheable注解:

基于SpringBoot的外卖项目的优化_第21张图片

通用返回类R需要实现Serializable序列化接口

基于SpringBoot的外卖项目的优化_第22张图片

用Redis图形化桌面工具也可以看到缓存中有套餐数据

基于SpringBoot的外卖项目的优化_第23张图片

新增套餐和删除套餐也类似都需要加入@CacheEvict注解

基于SpringBoot的外卖项目的优化_第24张图片

基于SpringBoot的外卖项目的优化_第25张图片

2、读写分离

2.1、主从复制

存在的问题

基于SpringBoot的外卖项目的优化_第26张图片

基于SpringBoot的外卖项目的优化_第27张图片

介绍

基于SpringBoot的外卖项目的优化_第28张图片

配置

基于SpringBoot的外卖项目的优化_第29张图片

配置主库–master

基于SpringBoot的外卖项目的优化_第30张图片

在这里插入图片描述

基于SpringBoot的外卖项目的优化_第31张图片

基于SpringBoot的外卖项目的优化_第32张图片

配置从库–slave

基于SpringBoot的外卖项目的优化_第33张图片

在这里插入图片描述

基于SpringBoot的外卖项目的优化_第34张图片

基于SpringBoot的外卖项目的优化_第35张图片

2.2、读写分离

背景

基于SpringBoot的外卖项目的优化_第36张图片

Sharding-JDBC介绍

基于SpringBoot的外卖项目的优化_第37张图片

案例

在这里插入图片描述

pom

<dependency>
    <groupId>org.apache.shardingspheregroupId>
    <artifactId>sharding-jdbc-spring-boot-starterartifactId>
    <version>4.0.0-RC1version>
dependency>

配置数据源

server:
  port: 8080
mybatis-plus:
  configuration:
    #在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: ASSIGN_ID
spring:
  shardingsphere:
    datasource:
      names:
        master,slave
      # 主数据源
      master:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.138.100:3306/rw?characterEncoding=utf-8
        username: root
        password: root
      # 从数据源
      slave:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.138.101:3306/rw?characterEncoding=utf-8
        username: root
        password: root
    masterslave:
      # 读写分离配置
      load-balance-algorithm-type: round_robin #轮询
      # 最终的数据源名称
      name: dataSource
      # 主库数据源名称
      master-data-source-name: master
      # 从库数据源名称列表,多个逗号分隔
      slave-data-source-names: slave
    props:
      sql:
        show: true #开启SQL显示,默认false
  main:
    allow-bean-definition-overriding: true

2.3、项目中实现读写分离

数据库环境准备

在这里插入图片描述

在这里插入图片描述

跟上面的案例一样,准备好主从两个数据库、导pom、修改配置文件

3、Nginx

3.1、概述

介绍

基于SpringBoot的外卖项目的优化_第38张图片

下载和安装

基于SpringBoot的外卖项目的优化_第39张图片

基于SpringBoot的外卖项目的优化_第40张图片

目录结构

基于SpringBoot的外卖项目的优化_第41张图片

基于SpringBoot的外卖项目的优化_第42张图片

3.2、命令

查看版本

cd /usr/local/nginx/sbin
./nginx -v

在这里插入图片描述

检查配置文件的正确性

cd /usr/local/nginx/sbin
./nginx -t

在这里插入图片描述

启动和停止

简单启动:

cd /usr/local/nginx/sbin
./nginx

复杂启动:

cd /usr/local/nginx/sbin
./nginx -c /usr/local/nginx/conf/nginx.conf

查看进程:

ps -ef | grep nginx

停止:

cd /usr/local/nginx/sbin
./nginx -s quit

cd /usr/local/nginx/sbin
./nginx -s stop

重新加载配置文件

cd /usr/local/nginx/sbin
./nginx -s reload
systemctl status nginx

3.3、配置文件的结构

基于SpringBoot的外卖项目的优化_第43张图片

3.4、具体应用

部署静态资源

基于SpringBoot的外卖项目的优化_第44张图片

反向代理

介绍

基于SpringBoot的外卖项目的优化_第45张图片

基于SpringBoot的外卖项目的优化_第46张图片

配置

基于SpringBoot的外卖项目的优化_第47张图片

负载均衡

介绍

基于SpringBoot的外卖项目的优化_第48张图片

配置

基于SpringBoot的外卖项目的优化_第49张图片

负载均衡策略

基于SpringBoot的外卖项目的优化_第50张图片

4、前后端分离

问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NvB6CWsL-1677236950620)(E:/typora/image-20230224124113816.png)]

4.1、前后端分离开发

介绍

基于SpringBoot的外卖项目的优化_第51张图片

基于SpringBoot的外卖项目的优化_第52张图片

基于SpringBoot的外卖项目的优化_第53张图片

开发流程

基于SpringBoot的外卖项目的优化_第54张图片

前端技术栈

基于SpringBoot的外卖项目的优化_第55张图片

4.2、YApi/FastApi/Apifox

介绍

基于SpringBoot的外卖项目的优化_第56张图片

使用

4.3、Swagger

介绍

基于SpringBoot的外卖项目的优化_第57张图片

使用

基于SpringBoot的外卖项目的优化_第58张图片

pom

        <dependency>
            <groupId>com.github.xiaoymingroupId>
            <artifactId>knife4j-spring-boot-starterartifactId>
            <version>3.0.2version>
        dependency>

基于SpringBoot的外卖项目的优化_第59张图片

    @Bean
    public Docket createRestApi() {
        // 文档类型
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.itheima.reggie.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("瑞吉外卖")
                .version("1.0")
                .description("瑞吉外卖接口文档")
                .build();
    }

WebMvcConfig

基于SpringBoot的外卖项目的优化_第60张图片

LoginCheckFilter

基于SpringBoot的外卖项目的优化_第61张图片

启动项目

进入网址:www.localhost:8080/doc.html 就会生成对应的接口文档

基于SpringBoot的外卖项目的优化_第62张图片

常用注解

基于SpringBoot的外卖项目的优化_第63张图片

将这些注解加在对应的类上,属性上,生成的doc文档就含有中文解释

基于SpringBoot的外卖项目的优化_第64张图片

4.4、项目部署

部署架构

基于SpringBoot的外卖项目的优化_第65张图片

部署环境说明

基于SpringBoot的外卖项目的优化_第66张图片

–end–

你可能感兴趣的:(项目实战,spring,boot,redis,java)