当前位置: 首页 > news >正文

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

问题分析

在这里插入图片描述

代码改造

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: truelog-impl: org.apache.ibatis.logging.stdout.StdOutImplglobal-config:db-config:id-type: ASSIGN_ID
spring:shardingsphere:datasource:names:master,slave# 主数据源master:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.138.100:3306/rw?characterEncoding=utf-8username: rootpassword: root# 从数据源slave:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.138.101:3306/rw?characterEncoding=utf-8username: rootpassword: rootmasterslave:# 读写分离配置load-balance-algorithm-type: round_robin #轮询# 最终的数据源名称name: dataSource# 主库数据源名称master-data-source-name: master# 从库数据源名称列表,多个逗号分隔slave-data-source-names: slaveprops:sql:show: true #开启SQL显示,默认falsemain: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>

在这里插入图片描述

    @Beanpublic 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–

相关文章:

基于SpringBoot的外卖项目的优化

基于SpringBoot的外卖项目的优化1、缓存优化1.1、缓存短信验证码问题分析代码改造1.2、缓存菜品数据实现思路1.3、Spring Cache介绍常用注解CachePutCacheEvictCacheable使用方式1.4、缓存套餐数据实现思路代码改造2、读写分离2.1、主从复制存在的问题介绍配置配置主库--master…...

Ubuntu20.04/22.04 ESP32 命令行开发环境配置

ESP32 芯片系列 ESP32分三个系列 ESP32-S ESP32-S3: Xtensa 32位 LX7 双核 240 MHz, 384KB ROM, 512KB SRAM, QFN7x7, 56-pin, 2.4G Wi-Fi BTESP32-S2: Xtensa 32位 LX7 单核 240 MHz, 128KB ROM, 320KB SRAM, QFN7x7, 56-pin, 2.4G Wi-Fi ESP32-C ESP32-C3: RISC-V 32位 单…...

Kali Linux使用Metasploit生成木马入侵安卓系统

额&#xff0c;这是我最后一篇文章了&#xff0c;周一我们开学了 文章目录前言一、Metasploit是什么&#xff1f;演示环境二、生成可执行木马文件1.生成2.运行命令并生成木马配置参数入侵安卓手机命令1.查看对方手机系统信息查看对方手机安装哪些app文件总结前言 前言&#xf…...

数据库复习1

一. 简答题&#xff08;共1题&#xff0c;100分&#xff09; 1. (简答题) 存在数据库test&#xff0c;数据库中有如下表&#xff1a; 1.学生表 Student(Sno,Sname,Sage,Ssex) --Sno 学号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 主键Sno 2.教师表 Teacher(Tno,Tname) --T…...

18. linux系统基础

shell 命令解析器 命令解析器作用&#xff1a; 他把在终端上输出的命令 给你解析成内核可以识别的指令&#xff0c;内核 是经过命令解析器的加工 shell在找命令的时候&#xff0c;所包含的路径&#xff0c;就是在这些路径里去 找 找到就执行 找不到就报错 报错 要么 这个命…...

ssh远程登录报错:kex_exchange_identification: Connection closed by remote host

基本信息系统&#xff1a;MacOS Catalina 10.15.7报错信息&#xff1a;终端登录远程服务器时报错&#xff1a;kex_exchange_identification: Connection closed by remote host复制然而服务商的一键登录或VNC登录正常。解决方案首先使用以下命令debug登录过程&#xff0c;以便定…...

Quartus II 的入门级使用

好久没有用VHDL写东西了&#xff0c;今天需要完成一个项目&#xff0c;重新复习一下新建工程新建工程file-->New Project Wizard, next, 选择存放的路径名字&#xff08;projecttop-level 名字要相同&#xff09;&#xff0c;next&#xff0c;File name名字同上&#xff0c;…...

Java EE|TCP/IP协议栈之TCP协议工作机制上

文章目录前言一、确认应答二、超时重传三、连接管理三次握手四次挥手前言 前边&#xff0c;我们已经大概交代了TCP的报文结构。但是仍有一些字段我们不确定到底怎么理解&#xff0c;这里就分析TCP的内部工作机制了。 TCP的内部很复杂&#xff0c;有很多机制&#xff0c;这里我们…...

智能化人机协作 遮挡情况下准确识别目标信息

研究背景 废旧产品&#xff08;end-of-life products&#xff09;的拆卸是工程全生命周期管理的一个基本步骤。在减少资源消耗和温室气体排放的同时&#xff0c;回收可重复使用的部件可能创造相当的经济价值&#xff0c;同时也能推动碳中和目标的实现。 但目前EoL的拆卸仍然严…...

React(一):初识React、类组件、jsx的基础语法

React&#xff08;一&#xff09;一、初识React1.简单介绍2.React的三个依赖3.Hello React案例二、类组件1.定义类组件并渲染2.绑定事件函数&#xff08;奇怪的this问题&#xff09;3.数组形式数据的展示&#xff08;电影案例&#xff09;4.计数器案例三、jsx语法详解1.jsx的书…...

2023-2-24 刷题情况

获取单值网格的最小操作数 题目描述 给你一个大小为 m x n 的二维整数网格 grid 和一个整数 x 。每一次操作&#xff0c;你可以对 grid 中的任一元素 加 x 或 减 x 。 单值网格 是全部元素都相等的网格。 返回使网格化为单值网格所需的 最小 操作数。如果不能&#xff0c;返…...

测试员拿到新项目怎么着手测试?不要慌,照做准没错

一、目标 结合公司现有的项目情况制定合理规范的测试流程&#xff0c;提高测试效率和产品质量&#xff0c;尽可能减少客户对产品的问题反馈&#xff0c; 核心还是要加强项目组成员之间的工作交流和沟通&#xff0c;保证整个项目的高效率的按质按量的交付。 二、测试流程说明…...

通过cfssl自签证书https证书

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

openEuler部署Ceph集群(块存储)

openEuler部署Ceph集群1 目标2 环境2.1 服务器信息2.2 软件信息3 部署流程3.1 获取系统镜像3.2 创建虚拟机3.3 配置虚拟机3.3.1 配置互信3.3.2 关闭防火墙3.3.3 配置免密登录3.3.4 配置NTP3.3.4.1 安装NTP服务3.3.4.2 配置NTP服务端3.3.4.3 配置NTP客户端3.3.4.4 启动NTP服务3.…...

npm install vue2-ace-editor 安装报错

npm install vue2-ace-editor 安装报错&#xff0c;如下图 目录 npm install vue2-ace-editor 安装报错&#xff0c;如下图 &#x1f9e8;&#x1f9e8;&#x1f9e8;解决方法&#xff1a;在命令后面加上 神秘代码 npm install vue2-ace-editor --save --legacy-peer-deps &a…...

【PyQt5图形界面编程(2)】:创建工程

创建工程 一、创建工程二、开始开发1、运行Qt5Designer,创建QT窗口2、运行pyUIC,转换xx.ui成xx.py3、main.py中引用xx.py中的类4、打包main.py成main.exe来发布5、执行终端报警处理方法三、其他(如果涉及)1、配置环境变量一、创建工程 采用虚拟环境来创建工程 相关的paka…...

ansible实战应用系列教程9:管理inclusions

ansbile实战应用系列教程8:管理inclusions InclusionsIncluding TasksIncluding VariablesInclusions 当处理复杂或冗长的剧本时,管理员可以使用单独的文件将任务和变量列表划分为更小的部分,以便于管理。在playbook中引入外部任务文件和变量有多种方法。 方法一:tasks使用…...

MyBatis学习笔记(五) —— MyBatis获取参数值的两种方式

5、MyBatis获取参数值的两种方式 MyBatis获取参数值的两种方式&#xff1a;${} 和 #{} ${} 的本质就是字符串拼接&#xff0c; #{} 的本质就是占位符赋值 ${} 使用字符串拼接的方式拼接sql&#xff0c;若为字符串类型或日期类型的字段进行赋值时&#xff0c;需要手动加单引号&a…...

go module构建项目

在go 1.11版本中引入了Go Module内置的包管理模块&#xff0c;是GOPATH的替代品&#xff0c;集成了版本控制和软件包分发支持的功能。即go使用modules管理依赖&#xff0c;项目依赖构建时不需要再依赖GOPATH环境变量。 要使用go module首先要激活modules .升级go到1.11版本 .这…...

已经准备上千道软件测试面试题了,建议大家收藏!!!还有视频详解!

2023华为软件测试笔试面试真题&#xff0c;抓紧收藏不然就看不到了_测试小鬼的博客-CSDN博客_华为软件测试工程师面试题1、对计算机软件和硬件资源进行管理和控制的软件是&#xff08;D&#xff09;A.文件管理程序B.输入输出管理程序C.命令出来程序D.操作系统2、在没有需求文档…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...

[特殊字符] 手撸 Redis 互斥锁那些坑

&#x1f4d6; 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作&#xff0c;想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁&#xff0c;也顺便跟 Redisson 的 RLock 机制对比了下&#xff0c;记录一波&#xff0c;别踩我踩过…...

轻量级Docker管理工具Docker Switchboard

简介 什么是 Docker Switchboard &#xff1f; Docker Switchboard 是一个轻量级的 Web 应用程序&#xff0c;用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器&#xff0c;使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...

Git 命令全流程总结

以下是从初始化到版本控制、查看记录、撤回操作的 Git 命令全流程总结&#xff0c;按操作场景分类整理&#xff1a; 一、初始化与基础操作 操作命令初始化仓库git init添加所有文件到暂存区git add .提交到本地仓库git commit -m "提交描述"首次提交需配置身份git c…...

持续交付的进化:从DevOps到AI驱动的IT新动能

文章目录 一、持续交付的本质&#xff1a;从手动到自动的交付飞跃关键特性案例&#xff1a;电商平台的高效部署 二、持续交付的演进&#xff1a;从CI到AI驱动的未来发展历程 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/101f72defaf3493ba0ba376bf09367a2.png)中国…...

mq安装新版-3.13.7的安装

一、下载包&#xff0c;上传到服务器 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.7/rabbitmq-server-generic-unix-3.13.7.tar.xz 二、 erlang直接安装 rpm -ivh erlang-26.2.4-1.el8.x86_64.rpm不需要配置环境变量&#xff0c;直接就安装了。 erl…...

项目研究:使用 LangGraph 构建智能客服代理

概述 本教程展示了如何使用 LangGraph 构建一个智能客服代理。LangGraph 是一个强大的工具&#xff0c;可用于构建复杂的语言模型工作流。该代理可以自动分类用户问题、分析情绪&#xff0c;并根据需要生成回应或升级处理。 背景动机 在当今节奏飞快的商业环境中&#xff0c…...