基于SpringBoot的外卖项目的优化

news2025/7/21 10:59:35

基于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、缓存短信验证码

问题分析

在这里插入图片描述

代码改造

pom.xml

<!--开启 redis 缓存-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

application.yml

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.2、缓存菜品数据

实现思路

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

1.3、Spring Cache

介绍

在这里插入图片描述

常用注解

在这里插入图片描述

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

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

@CachePut

在这里插入图片描述

@CacheEvict

在这里插入图片描述

在这里插入图片描述

@Cacheable

在这里插入图片描述

在这里插入图片描述

使用方式

在这里插入图片描述

1.4、缓存套餐数据

实现思路

在这里插入图片描述

代码改造

pom.xml

<!--开启 cache 缓存-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

application.yml

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

2、读写分离

2.1、主从复制

存在的问题

在这里插入图片描述

在这里插入图片描述

介绍

在这里插入图片描述

配置

在这里插入图片描述

配置主库–master

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

配置从库–slave

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.2、读写分离

背景

在这里插入图片描述

Sharding-JDBC介绍

在这里插入图片描述

案例

在这里插入图片描述

pom

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.0.0-RC1</version>
</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、概述

介绍

在这里插入图片描述

下载和安装

在这里插入图片描述

在这里插入图片描述

目录结构

在这里插入图片描述

在这里插入图片描述

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、配置文件的结构

在这里插入图片描述

3.4、具体应用

部署静态资源

在这里插入图片描述

反向代理

介绍

在这里插入图片描述

在这里插入图片描述

配置

在这里插入图片描述

负载均衡

介绍

在这里插入图片描述

配置

在这里插入图片描述

负载均衡策略

在这里插入图片描述

4、前后端分离

问题

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

4.1、前后端分离开发

介绍

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

开发流程

在这里插入图片描述

前端技术栈

在这里插入图片描述

4.2、YApi/FastApi/Apifox

介绍

在这里插入图片描述

使用

4.3、Swagger

介绍

在这里插入图片描述

使用

在这里插入图片描述

pom

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

在这里插入图片描述

    @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

在这里插入图片描述

LoginCheckFilter

在这里插入图片描述

启动项目

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

在这里插入图片描述

常用注解

在这里插入图片描述

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

在这里插入图片描述

4.4、项目部署

部署架构

在这里插入图片描述

部署环境说明

在这里插入图片描述

–end–

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/368580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

获取浏览器硬件资源的媒体数据(拍照、录音、录频、屏幕共享)

目录一、window.navigator 对象包含有关访问者浏览器的信息取二、MediaDevices1.使用麦克风2.使用摄像头&#xff08;和音频一样&#xff09;3.拍照4.录屏三、MediaRecorder(录制,可录制音频视屏)一、window.navigator 对象包含有关访问者浏览器的信息取 <!DOCTYPE html>…

YZRJ面试

面试过程目录概述需求&#xff1a;设计思路实现思路分析1.自我介绍之类的2.http 和https 协议的区别3.进程和线程的区别4.vm 安装的nginx 和Mysql5.评价拓展实现参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full bu…

自然语言处理(NLP)之求近义词和类比词<MXNet中GloVe和FastText的模型使用>

这节主要就是熟悉MXNet框架中的两种模型&#xff1a;GloVe和FastText的模型(词嵌入名称)&#xff0c;每个模型下面有很多不同的词向量&#xff0c;这些基本都来自wiki维基百科和twitter推特这些子集预训练得到的。我们只需要导入mxnet.contrib中的text模块即可&#xff0c;这里…

模拟百度翻译-课后程序(JAVA基础案例教程-黑马程序员编著-第六章-课后作业)

【案例6-5】 模拟百度翻译 【案例介绍】 1.任务描述 大家对百度翻译并不陌生&#xff0c;本案例要求编写一个程序模拟百度翻译。用户输入英文之后搜索程序中对应的中文&#xff0c;如果搜索到对应的中文就输出搜索结果&#xff0c;反之给出提示。本案例要求使用Map集合实现英…

C/C++开发,无可避免的内存管理(篇一)-约束好跳脱的内存

一、养成内存管理好习惯 1.1 养成动态对象创建、调用及释放好习惯 开发者手动接管内存分配时&#xff0c;必须处理这两个任务。分配原始内存时&#xff0c;必须在该内存中构造对象&#xff1b;在释放该内存之前&#xff0c;必须保证适当地撤销这些对象。如果你的项目是c项目&am…

windows、linux系统设置404教程(适用虚拟主机)

设置一个好的自定义错误页面&#xff0c;可以增加网站的收录&#xff0c;挽留住一些可能因打不开的页面而放弃的客户&#xff0c;我司虚拟主机特别提供了自定义错误页面设置&#xff0c;包括404错误在内的所有自定义错误都可以设置。 linux系统设置方法&#xff1a; 第一步:在…

mysql 内存架构

1. 背景 从 innodb 的整体架构中可以知道 innodb 的内存架构中分为 buffer pool 缓存区, change pool 修改缓冲区, adaptive hash index 自适应哈希索引, 和 log buffer 日志缓冲区. 2. buffer pool buffer pool 是用于缓冲磁盘页的数据&#xff0c;mysql 的80%的内存会分配给…

通过cfssl自签证书https证书

背景 公司内部自建Web服务&#xff0c;通过自签CA&#xff0c;然后签发https证书 工具地址: GitHub - cloudflare/cfssl: CFSSL: Cloudflares PKI and TLS toolkit 使用步骤: 1. 在release页面中下载最新的二进制包&#xff0c;我使用的是1.5的解压并重命名二进制文件 tar…

Idea集成码云

1&#xff1a;Idea集成码云1.1&#xff1a;IDEA安装码云插件【第一步】Idea 默认不带码云插件&#xff0c; 我们第一步要安装 Gitee 插件。如图所示&#xff0c; 在 Idea 插件商店搜索 Gitee&#xff0c;然后点击右侧的 Install 按钮。安装成功后&#xff0c;重启 Idea。Idea 重…

复旦团队发布国内首个模型MOSS 类ChatGPT

复旦团队发布国内首个模型MOSS 类ChatGPT 首先看到这个标题&#xff0c;还有这个名字&#xff0c;我是正经&#xff08;zhen jing&#xff09;的 &#xff08;bu shi 流浪地球&#xff1f;550W&#xff1f;不了解的可以把550W倒过来写&#xff0c;就懂了 看到新闻里的一些图…

Interview系列 - 07 Java | 集合的快速失败和安全失败机制 | 迭代器类源码 | CopyOnWriteArrayList

文章目录1. 集合的快速失败 (fail-fast)1. 使用增强for遍历集合并使用ArrayList的 remove() 方法删除集合元素2. 使用 forEach 遍历集合并使用ArrayList的 remove() 方法删除集合元素3. 使用迭代器遍历集合并使用ArrayList的 remove() 方法删除集合元素4. 使用迭代器遍历集合并…

人脑脊液的代谢组学研究—标识恶性神经胶质瘤的特征

百趣代谢组学分享&#xff0c;脑疾病病人的脑脊液&#xff08;CSF&#xff09;通常用来诊断和监测研究&#xff0c;但是恶性胶质瘤病人脑脊液组成的变化很少被人们所知。该研究作者建立了靶向代谢组学分析方法&#xff0c;采用SRM监测模式&#xff0c;使用正负离子切换的方法在…

MySQL实战之深入浅出索引(上)

1.前言 提到数据库&#xff0c;大家肯定会想到数据库的索引&#xff0c;很多人都知道索引是为了提高查询效率的&#xff0c;那么今天我就给大家讲一下&#xff0c;什么是索引&#xff0c;索引的数据结构是什么&#xff0c;索引是如何工作的。 因为索引的内容比较多&#xff0…

大数据应用要经得起考验,不可盲目跟风_光点科技

一项大数据应用&#xff0c;如果不是经得起推敲的&#xff0c;那就值得怀疑它是不是优秀的大数据应用&#xff0c;是不是有可利用的价值&#xff0c;是不是值得将人力物力财力花费在其中。所以&#xff0c;必须对大数据应用进行必要的筛选&#xff0c;做一定的检验之后才可以做…

vegfr2药物|适应症|市场销售数据-上市药品前景分析

癌症作为人类身体健康的主要威胁&#xff0c;其高死亡率一直是人类死亡的主要原因。尽管人类为控制癌症付出了巨大的努力&#xff0c;然而癌症的发病率和死亡率还是在高速增长。而肺癌、结直肠癌、肝癌和乳腺癌等被认为是癌症死亡的主要因素。而根据科研人员发现&#xff0c;癌…

JavaScript HTML DOM 简介

文章目录JavaScript HTML DOM 简介HTML DOM (文档对象模型)HTML DOM 树查找 HTML 元素通过 id 查找 HTML 元素通过标签名查找 HTML 元素通过类名找到 HTML 元素下面我们将学到如下内容JavaScript HTML DOM 简介 通过 HTML DOM&#xff0c;可访问 JavaScript HTML 文档的所有元素…

高清无码的MP4如何采集?python带你保存~

前言 大家早好、午好、晚好吖 ❤ ~ 又是我,我又来采集小姐姐啦~ 这次我们采集的网站是(看下图): 本文所有模块\环境\源码\教程皆可点击文章下方名片获取此处跳转 话不多少,我们赶快开始吧~ 第三方模块: requests >>> pip install requests 如果安装python第三方模块…

刷题专练之数组移除元素

文章目录前言一、移除元素1.题目介绍2.思路&#xff1a;3.代码二、移动零1.题目介绍2.思路3.代码三、删除有序数组中的重复项1.题目介绍2.思想3.代码四、80. 删除有序数组中的重复项 II1.题目介绍2.思路3.代码4.推荐题解前言 我每个刷题篇的题目顺序都是特别安排的&#xff0c;…

FSM——squirrel状态机使用

FSM——squirrel状态机使用 1 FSM介绍 1.1 概念 FSM&#xff08;finite state machine&#xff09;:有限状态机 是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。核心内容&#xff1a;有限个状态、通过外部操作引起状态的转移。用来对状态的流转进行解耦&a…

C++031-C++日期模拟

文章目录C031-C日期模拟日期模拟题目描述 给出天数求月份日期题目描述 给出天数求月份日期-倒计时题目描述 求任意日期插值在线练习&#xff1a;总结C031-C日期模拟 在线练习&#xff1a; http://noi.openjudge.cn/ https://www.luogu.com.cn/ 日期模拟 题目描述 给出天数求月…