做一个交易网站要花多少钱,成立一个公司需要哪些流程,企业短视频推广,滨州网站设计目录 文件传下载
Git常用命令
Git工作区中文件的状态
远程仓库操作
分支操作 标签操作
idea中使用git
设置git.exe路径
操作步骤
linux配置jdk
安装tomcat 查看是否启动成功 查看tomcat进程 防火墙操作
开放指定端口并立即生效 安装mysql 修改mysql密码 安装lrzsz软…目录 文件传下载
Git常用命令
Git工作区中文件的状态
远程仓库操作
分支操作 标签操作
idea中使用git
设置git.exe路径
操作步骤
linux配置jdk
安装tomcat 查看是否启动成功 查看tomcat进程 防火墙操作
开放指定端口并立即生效 安装mysql 修改mysql密码 安装lrzsz软件上传下载 手工部署项目 停止springboot程序
通过shell脚本自动部署
linux安装git 使用git克隆远程仓库 redis基础
redis简介
Redis应用场景
redis下载地址
redis安装 启动和停止redis redis远程连接 redis数据类型 Redis常用命令
字符串string操作命令 哈希hash操作命令 列表list操作命令 集合set操作命令 有序集合sorted set操作命令 通用命令 java中操作redis
Spring Cache框架 Spring Cache常用注解
读写分离 主从复制
配置-前置条件 配置主库master
配置-从库slave Sharding-JDBC实现读写分离介绍 Nginx
nginx概述
nginx安装
安装完成
编辑 open() /usr/local/nginx/logs/access.log failed (21: Is a directory)nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
编辑 Restarting network (via systemctl): Job for network.service failed because the control process exited with error code. See systemctl status network.service and journalctl -xe for details. 启动和停止
配置环境变量简化命令 Nginx配置文件结构 Nginx具体应用
部署静态资源 正向代理 反向代理
配置反向代理
负载均衡
负载均衡策略
前后端分离开发 Swagger swagger常用注释 文件传下载
upload.html中
!DOCTYPE html
html langen
headmeta charsetUTF-8meta http-equivX-UA-Compatible contentIEedgemeta nameviewport contentwidthdevice-width, initial-scale1.0title文件上传/title!-- 引入样式 --link relstylesheet href../../plugins/element-ui/index.css /link relstylesheet href../../styles/common.css /link relstylesheet href../../styles/page.css /
/head
bodydiv classaddBrand-container idfood-add-appdiv classcontainerel-upload classavatar-uploaderaction/common/upload:show-file-listfalse:on-successhandleAvatarSuccess:before-uploadbeforeUploadrefuploadimg v-ifimageUrl :srcimageUrl classavatar/imgi v-else classel-icon-plus avatar-uploader-icon/i/el-upload/div/div!-- 开发环境版本包含了有帮助的命令行警告 --script src../../plugins/vue/vue.js/script!-- 引入组件库 --script src../../plugins/element-ui/index.js/script!-- 引入axios --script src../../plugins/axios/axios.min.js/scriptscript src../../js/index.js/scriptscriptnew Vue({el: #food-add-app,data() {return {imageUrl: }},methods: {handleAvatarSuccess (response, file, fileList) {this.imageUrl /common/download?name${response.data}},beforeUpload (file) {if(file){const suffix file.name.split(.)[1]const size file.size / 1024 / 1024 2if([png,jpeg,jpg].indexOf(suffix) 0){this.$message.error(上传图片只支持 png、jpeg、jpg 格式)this.$refs.upload.clearFiles()return false}if(!size){this.$message.error(上传文件大小不能超过 2MB!)return false}return file}}}})/script
/body
/html
controller下的commoncontroller
package com.reggie.controller;import com.reggie.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.UUID;RestController
Slf4j
RequestMapping(/common)
public class CommonController {Value(${zhfood.path})private String basePath;
// Value(zhfood.path.name)
// private String pathName;/*** 文件上传* param file* return*/PostMapping(/upload)public RString upload(MultipartFile file){//file是一个临时文件需要转存到指定的位置否则本次请求后临时文件会被删除log.info(file.toString());//使用原始文件名String originalFilename file.getOriginalFilename();//截取原始文件名的后缀String suffix originalFilename.substring(originalFilename.lastIndexOf(.));//使用uuid生成文件名防止文件名重复造成覆盖String fileName UUID.randomUUID().toString()suffix;//创建一个目录对象File dir new File(basePath);//判断当前目录是否存在if(!dir.exists()){dir.mkdirs();//不存在就创建出来}try {//将临时文件转出到指定的位置file.transferTo(new File(basePathfileName));} catch (IOException e) {e.printStackTrace();}return R.success(fileName);}/*** 下载文件展示到浏览器* param name* param response*/GetMapping(/download)public void download(String name, HttpServletResponse response){try { //输入流通过输入流读取文件内容FileInputStream fileInputStream new FileInputStream(new File(basePathname));//输出流。通过输出流将文件写回溯给浏览器在浏览器中展示图片ServletOutputStream outputStream response.getOutputStream();//设置相应的为图片文件response.setContentType(image/jpeg);int len0;byte [] bytesnew byte[1024];while ((lenfileInputStream.read(bytes))!-1){outputStream.write(bytes,0,len);outputStream.flush();}//关闭资源outputStream.close();fileInputStream.close();} catch (Exception e) {e.printStackTrace();}}
}json数据传输要加requestBody注解
传入数据用session存起来之后取可以用BaseContext取出 计算总金额 AtomicInteger amount new AtomicInteger(0);//原子操作保证线程安全普通的int无法//stream流进行操作ListOrderDetail orderDetails shoppingCarts.stream().map((item) - {//将订单明细设置出来OrderDetail orderDetail new OrderDetail();orderDetail.setOrderId(orderId);orderDetail.setNumber(item.getNumber());orderDetail.setDishFlavor(item.getDishFlavor());orderDetail.setDishId(item.getDishId());orderDetail.setSetmealId(item.getSetmealId());orderDetail.setName(item.getName());orderDetail.setImage(item.getImage());orderDetail.setAmount(item.getAmount());//计算总金额amount.addAndGet(item.getAmount().multiply(new BigDecimal(item.getNumber())).intValue()); return orderDetail;}).collect(Collectors.toList());
Git常用命令 版本库:.git隐藏文件夹就是版本库版本库中存储了很多配置信息、日志信息和文件版本信息等
工作区:包含git文件夹的目录就是工作区也称为工作目录主要用于存放开发的代码
暂存区:.git文件夹中有很多文件其中有一个index文件就是暂存区也可以叫做stage。暂存区是一个临时保存修改文件的地方
Git工作区中文件的状态 Git工作区中的文件存在两种状态 untracked :未跟踪(未被纳入版本控制) tracked 已跟踪(被纳入版本控制)
Unmodified 未修改状态Modified 已修改状态Staged 已暂存状态 注意: 这些文件的状态会随着我们执行Git的命令发生变化
本地仓库常用命令如下 git status 查看文件状态 git add 将文件的修改加入暂存区 git reset 将暂存区的文件取消暂存或者是切换到指定版本 git commit 将暂存区的文件修改提交到版本库 git log 查看日志 远程仓库操作 前面执行的命令操作都是针对的本地仓库本节我们会学习关于远程仓库的一些操作具体包括: git remote 查看远程仓库 git remote add origin url 添加远程仓库 git clone 从远程仓库克隆 git pull 从远程仓库拉取 git push 推送到远程仓库 分支操作 分支是Git 使用过程中非常重要的概念。使用分支意味着你可以把你的工作从开发主线上分离开来以免影响开发主线。同一个仓库可以有多个分支各个分支相互独立互不干扰。通过git init 命令创建本地仓库时默认会创建一个master分支 git branch 查看分支 git branch [name] 创建分支 git checkout [name] 切换分支 git push[shortName][name]推送至远程仓库分支shortname是远程仓库的别名一般为origin git merge [name] 合并分支 标签操作
标签是指某个分支某个特定的时间段的状态
git tag 列出已有的标签
git tag [name] 创建标签
git push [shortName] [name] 将标签推送至远程仓库
git checkout -b [branch] [name] 检出标签 这个标签记录的是master分支下的所有内容
新增版本 检出某一版本检出标签时需要新建一个分支来指向某一版本 idea中使用git
设置git.exe路径 获取git仓库
在IDEA中使用Git获取仓库有两种方式:
本地初始化仓库从远程仓库克隆
初始化仓库 获取远程仓库 操作步骤 修改网络初始化配置设定网卡在系统启动时初始化 linux配置jdk 安装tomcat 查看是否启动成功 查看tomcat进程 ps命令是linux下非常强大的进程查看命令通过ps -ef可以查看当前运行的所有进程的详细信息“”在Linux中称为管道符可以将前一个命令的结果输出给后一个命令作为输入使用ps命令查看进程时经常配合管道符和查找命令 grep 一起使用来查看特定进程 防火墙操作
systemctl是管理Linux中服务的命令可以对服务进行启动、停止、重启查看状态等操作
firewall-cmd是Linux中专门用于控制防火墙的命令
为了保证系统安全服务器的防火墙不建议关闭
开放指定端口并立即生效 firewall-cmd --zonepublic --add-port8080/tcp --permanentfirewall-cmd --reload 访问测试 安装mysql
安装过程可以参考
linux下mysql安装 修改mysql密码
通过登录mysql系统
1 mysql -uroot -p
2 Enter password: 【输入原来的密码】
3 mysqluse mysql;
4 mysql update user set passwordpassworD(123456) where userroot;
5 mysql exit; 注意如果Mysql的版本是5.7及以上的话update语句更换如下
1 mysql update user set authentication_stringpassworD(123456) where userroot; 安装lrzsz软件上传下载 手工部署项目
先将springboot程序打成jar包 改为后台运行SpringBoot程序并将日志输出到日志文件
目前程序运行的问题
线上程序不会采用控制台霸屏的形式运行程序而是将程序在后台运行线上程序不会将日志输出到控制台而是输出到日志文件方便运维查阅信息 查看文件 停止springboot程序 查找关于java的进程
ps -ef |grep java关闭进程
kill -9 进程id 通过shell脚本自动部署
linux安装git 使用git克隆远程仓库
cd /usr/local/ //进入一个目录
git clone https://gitee.com/GKBSKC/hellow.git //克隆一个仓库地址 redis基础
Redis是一个基于内存的key-value结构数据库 基于内存存储读写性能高 适合存储热点数据(热点商品、资讯、新闻) 企业应用广泛
redis简介
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库官方提供的数据是可以达到100000的QPS(每秒内查询次数)。它存储的value类型比较丰富也被称为结构化的NoSql数据库NoSal(Not Only SOL)不仅仅是SQL泛指非关系型数据库。NoSql数据库并不是要取代关系型数据库而是关系型数据库的补充。
Redis应用场景
缓存任务队列消息队列分布式锁
redis下载地址
linux版本下载地址Index of /releases/
window版本下载地址https://github.com/microsoftarchive/redis/releases
redis安装 在Linux系统安装Redis步骤 1.将Redis安装包上传到Linux 2.解压安装包命令:tar -zxvf redis-4.0.0.tar.gz-C /usr/local 3.安装Redis的依赖环境gcc命令: yum install gcc-c 4.进入/usr/local/redis-4.0.0进行编译命令: make 5.进入redis的src目录进行安装命令:make install 启动和停止redis
找到redis解压的位置找到redis.server 停止redis服务ctrlc
redis默认在前台显示这不是很方便查看修改配置文件可以让到后台显示
进入文件可以先输入\dae找到文件位置然后输入i插入模式修改 显示的加载配置文件并启动了redis服务 redis远程连接 而且得关闭防火墙就可以连接成功 redis数据类型
Redis存储的是key-value结构的数据其中key是字符串类型value有5种常用的数据类型
字符串 string哈希 hash列表list集合set有序集合 sorted sets value的数据类型key固定是string类型 Redis常用命令
字符串string操作命令
redis中字符串类型常用命令 set key value 设置指定key的值 get key 获取指定key的值 setex key seconds value 设置指定key的值并将 key 的过期时间设为 seconds秒 setex key value 只有在key不存在时设置 key的值 MSET:批量添加多个String类型的键值对 MGET:根据多个key获取多个String类型的value INCR:让一个整型的key自增1 INCRBY:让一个整型的key自增并指定步长例如: incrby num 2让num值自增2 INCRBYFLOAT:让一个浮点类型的数字自增并指定步长 哈希hash操作命令 Redis hash 是一个string类型的 field 和 value 的映射表hash特别适合用于存储对象常用命令: hset key field value 将哈希表 key 中的字段 field 的值设为 value hget key field 获取存储在哈希表中指定字段的值 hdel key field 删除存储在哈希表中的指定字段 hkeys key 获取哈希表中所有字段 hvals key 获取哈希表中所有值 hgetall key 获取在哈希表中指定key的所有字段和值 列表list操作命令
Redis 列表是简单的字符串列表按照插入顺序排序常用命令: lpush key value1 value2 将一个或多个值插入到列表头部 lrange key start stop 获取列表指定范围内的元素 rpop key 移除并获取列表最后一个元素 llen key 获取列表长度 brpop key1 [key2 ] timeout 移出并获取列表的最后一个元素如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 集合set操作命令
Redis set 是string类型的无序集合。集合成员是唯一的这就意味着集合中不能出现重复的数据常用命令 sadd key member1[member2]向集合添加一个或多个成员 smembers key 返回集合中的所有成员 scard key 获取集合的成员数 sinter key1 [key2] 返回给定所有集合的交集 sunion key1 [key2] 返回所有给定集合的并集 sdiff key1 [key2] 返回给定所有集合的差集 srem key member [member2] 移除集合中一个或多个成员 有序集合sorted set操作命令
Redis sorted set有序集合是 string 类型元素的集合且不允许重复的成员。每个元素都会关联一个double类型的分数score)。redis正是通过分数采为集合中的成员进行从小到大排序。有序集合的成员是唯一的但分数却可以重复。 常用命令: zadd key score1 member1 [score2 member2]向有序集合添加一个或多个成员或者更新已存在成员的分数 zrange key start stop [withscores] 通过索引区间返回有序集合中指定区间内的成员 zincrby key increment member有序集合中对指定成员的分数加上增量increment zrem key member[member ...]移除有序集合中的一个或多个成员 通用命令 keys patern 查找素有符合给定模式pattern的key exists key 检查给定的key是否存在 type key 返回key所储存的值的类型 ttl key返回给定key的剩余生命时间ttltime to live以秒为单位 del key 用于在key存在时删除key可以一次性删除多个如del name age ... java中操作redis
Redis的Java 客户端很多官方推荐的有三种:
JedisLettuceRedisson
Spring 对Redis客户端进行了整合提供了 Spring Data Redis,在Spring Boot项目中还提供了对应的Starter即spring-boot-starter-data-redis
在springboot项目中可以使用spring data Redis来简化Redis操作maven坐标 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency
Spring Data Redis中提供了一个高度封装的类:RedisTemplate针对iedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口具体分类如下:
ValueOperations:简单K-V操作SetOperations: set类型数据操作ZSetOperations: zset类型数据操作HashOperations:针对map类型的数据操作ListOperations:针对list类型的数据操作
Spring Cache框架
Spring Cache是一个框架实现了基于注解的缓存功能只需要简单地加一个注解就能实现缓存功能。Spring Cache提供了一层抽象底层可以切换不同的cache实现。具体就是通过CacheManager接口来统一不同的缓存技术。 CacheManager是Spring提供的各种缓存技术抽象接口。 针对不同的缓存技术需要实现不同的CacheManager: Spring Cache常用注解 在spring boot项目中使用缓存技术只需在项目中导入相关缓存技术的依赖包并在启动类上使用EnableCaching开启缓存支持即可。 例如使用Redis作为缓存技术只需要导入Spring data Redis的maven坐标即可
读写分离
读和写所有压力都由一台数据库承担压力大数据库服务器磁盘损坏则数据丢失单点故障
分离的情景 主从复制
MySOL主从复制是一个异步的复制过程底层是基于Mysgl数据库自带的二进制日志功能。就是一合或多合MySOL数据库(slave即从库)从另一台MySOL数据库(master即主库)进行日志的复制然后再解析日志并应用到自身最终实现从库的数据和主库的数据保持一致。MySOL主从复制是MvSOL数据库自带功能无需借助第三方工具。 MySQL复制过程分成三步
master将改变记录到二进制日志 (binary log)slave将master的binary log拷贝到它的中继日志 (relay logslave重做中继日志中的事件将改变应用到自己的数据库中 配置-前置条件
准备好两台服务器都按装好mysql并启动服务成功
systemctl start mysqld.service启动mysql服务 使用service mysqld status查看运行状态
主库master 配置主库master 第一步:修改Mysql数据库的配置文件/etc/my.cnf
[mysqld]
log-binmysql-bin#[必须]启用二进制日志
server-id134 #[必须]服务器唯一ID 第二步重启mysql服务
systemctl restart mysqld
第三步登录mysql数据库执行如下sql
GRANT REPLICATION SLAVE ON *.* to xiaoming% identified by Root123456;
注上面sql的作用是创建一个用户xiaoming密码为Root123456并目给xiaoming用户损REPLICATION SLAV权眼。常用于建立复制时所需要用到的用户权限也就是slave必须被master授权具有该权限的用户才能通过该用户复制
第四步登录msql数据库执行下面的sql记录下结果中fule和position的值 show master status; 注:上面SQL的作用是查看Master的状态执行完此SQL后不要再执行任何操作
配置-从库slave
第一步:修改Mysq1数据库的配置文件/etc/my.cnf
[mysqld]
server-id135 #[必须]服务器唯一ID 第二步重启mysql服务
systemctl restart mysqld
第三步登录mysql数据库执行如下sql
change master to master_host192.168.99.134, master_userxiaoming,master_passwordRoot123456,master_log_filemysql-bin.000001,master_log_pos853;
start slave 第四步执行下面sql查看从库状态 show slave status 将赋值到查看器中 在主库中的操作从表也会有变化 Sharding-JDBC实现读写分离介绍
ShardingDBC定位为轻量级/ava框架在Java的]DBC层提供的额外服务。它使用客户端直连数据库以jar包形式提供服务无需额外部署和依赖可理解为增强版的JDBC驱动完全兼容JDBC和各种ORM框架。使用Sharding-JDBC可以在程序中轻松的实现数据库读写分离。 适用于任何基于]DBC的ORM框架如:JPA,Hibernate,Mybatis,SpringJDBCTemplate或直接使用JDBC. 支持任何第三方的数据库连接池如: DBCP,C3PO,BoneCP,Druid,HikariCP等。 支持任意实现]DBC规范的数据库。目前支持MySQLOracleLServerPostgresQL以及任何遵循SQL92标准的数据库。
使用Sharding-JDBC实现读写分离步骤
1、导入maven坐标2、在配置文件中配置读写分离规则3、在配置文件中配置允许bean定义覆盖配置项
配置
spring:application:name: reggie_take_out2shardingsphere:datasource:names:master,slave#主数据源master:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.99.134:3306/reggie?characterEncodingutf-8username: rootpassword: 123456#从数据源slave:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.99.135:3306/reggie?characterEncodingutf-8username: rootpassword: 123456masterslave:#读写分离配置,负载均衡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 #允许bean覆盖
dependencygroupIdorg.apache.shardingsphere/groupIdartifactIdsharding-jdbc-spring-boot-starter/artifactIdversion4.0.0-RC1/version
/dependency Nginx
nginx概述
Nginx是一款轻量级的web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少并发能力强事实上nginx的并发能力在同类型的网页服务器中表现较好中国大陆使用nginx的网站有:百度、京东新浪、网易、腾讯、淘宝等。 Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler,ru站点(俄文: Pam6nep)开发的第一个公开版本.1.发布于2094年10月4日。
nginx安装 1、安装依赖包 yum -y install gcc pcre-devel zlib-devel openssl openssl-devel 2、下载Nginx安装包 wget https://nginx.org/download/nginx-1.16.1.tar.gz 3、解压 tar -zxvf nginx-1.16.1.tar.gz 4、cd nginx-1.16.1 创建Nginx目录 mkdir -p /usr/local/nginx 5、./configure --prefix/usr/local/nginx 6、make make install 安装完成 open() /usr/local/nginx/logs/access.log failed (21: Is a directory) nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed
是说这个access是一个目录需要进入这个logs目录把这个access.log删除使用命令
rm -rf access.log ,有时候权限不够需要su root 删除完成之后使用touch access.log创建
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
使用这个命令结束即可 sudo fuser -k 80/tcp
被占用ps -ef |grep nginx查看 nginx的进程 使用kill -9 xxx 杀死进程进程即可 Restarting network (via systemctl): Job for network.service failed because the control process exited with error code. See systemctl status network.service and journalctl -xe for details.
没有ip地址时候 重启network网络报错
$ systemctl stop NetworkManager
$ systemctl disable NetworkManager
# 重启network
$ systemctl start network.service重点目录/文件: conf/nginx.conf nginx配置文件 html存放静态文件 (htm1、CSs、Js等) logs日志目录存放日志文件 sbin/nginx 二进制文件用于启动、停止Nginx服务 查看版本号
检查配置文件的正确性
找到安装nginx的位置 启动和停止
在sbin目录下
启动Nginx服务使用如下命令 ./nginx 停止Nginx服务使用如下命令: ./nginx -s stop 启动完成后可以查看Nginx进程 ps -ef | grep nginx
重新加载 nginx -s reload 配置环境变量简化命令
vim /etc/profile进入配置文件
然后在这加入红线部分的话 Nginx配置文件结构
整体结构介绍 Nginx具体应用
部署静态资源
Nginx可以作为静态web服务器来部署静态资源。静态资源指在服务端真实存在并且能够直接展示的一些文件比如常见的html页面、css文件、js文件、图片、视频等资源。
相对于TomcatNginx处理静态资源的能力更加高效所以在生产环境下一般都会将静态资源部署到Nginx中。将静态资源部署到Nginx非常简单只需要将文件复制到Nginx安装目录下的html目录中即可。 将文件放在nginx目录下的html目录下
从外部访问linux注意防火敲是否关闭或者端口是否开放 正向代理
是一个位于客户端和原始服务器(origin server)之间的服务器为了从原始服务器取得内容客户端向代理发送一个请求并指定目标(原始服务器)然后代理向原始服务器转交请求并将获得的内容返回给客户端。正向代理的典型用途是为在防火墙内的局域网客户端提供访问internet的途径。正向代理一般是在客户端设置代理服务器通过代理服务器转发请求最终访问到目标服务器 反向代理
反向代理服务器位于用户与目标服务器之间但是对于用户而言反向代理服务器就相当于目标服务器即用户直接访问反向代理服务器就可以获得目标服务器的资源反向代理服务器负责将请求转发给目标服务器用户不需要知道目标服务器的地址也无须在用户端作任何设定。 配置反向代理
server {listen 82;server_name localhost;location / {proxy_pass http://192.168.99.135:8080; #反向代理配置将请求转发到指定服务}
} 客户端通过访问一个反向代理服务器转发到指定的web服务器
负载均衡
早期的网站流量和业务功能都比较简单单台服务器就可以满足基本需求但是随着互联网的发展业务流量越来越大并且业务逻辑也越来越复杂单台服务器的性能及单点故障问题就凸显出来了因此需要多台服务器组成应用集群进行性能的水平扩展以及避免单点故障出现。 应用集群:将同一应用部署到多台机器上组成应用集群接收负载均衡器分发的请求进行业务处理并返回响应数据 负载均衡器:将用户请求根据对应的负载均衡算法分发到应用集群中的一台服务器进行处理 同样是在反向代理那边配置
负载均衡策略 server 192.168.138.101:8080 weight10
server 192.168.138.101:8081 weight5;
在集群中的服务器中加入即可weight默认是1值越大权重越大概率也就越大
前后端分离开发
前后端分离开发就是在项目开发过程中对于前端代码的开发由专门的前端开发人员负责后端代码则由后端开发人员负责这样可以做到分工明确、各司其职提高开发效率前后端代码并行开发可以加快项目开发进度。目前前后端分离开发方式已经被越来越多的公司所采用成为当前项目开发的主流开发方式 前后端分离开发后从工程结构上也会发生变化即前后端代码不再混合在同一个maven工程中而是分为前端工程和后端工程。 开发流程
前后端分离开发后面临一个问题就是前端开发人员和后端开发人员如何进行配合可以按照一下流程进行 接口(API接口就是一个http的请求地址主要就是去定义请求路径、请求方式、请求参数、响应数据等内容。
如 前端的技术栈 Swagger
使用swagger腻子需要按照它的规范去定义接口以及接口相关的信息在通过Swagger衍生出来的一系列项目和工具就可以做到生成各种格式的接口文档以及在线接口调试页面等。
官网https://swagger.io/
knife4j是为java MVC框架集成Swagger生成api文档的增强解决方案
dependencygroupIdcom.github.xiaoymin/groupIdartifactIdknife4j-spring-boot-starter/artifactIdversion3.0.2/version
/dependency
使用方式
操作步骤:
1、导入knife4j的maven坐标2、导入knife4j相关配置类3、设置静态资源否则接日文档页面无法访问4、在LoginCheckFilter中设置不需要处理的请求路径
1、导入坐标
dependencygroupIdcom.github.xiaoymin/groupIdartifactIdknife4j-spring-boot-starter/artifactIdversion3.0.2/version
/dependency 2、WebMvcConfig类中
以及加上两个注解
//开启swagger文档功能
EnableSwagger2
EnableKnife4j Beanpublic Docket createRestApi(){//文档类型return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage(com.reggie.controller)).paths(PathSelectors.any()).build();}private ApiInfo apiInfo(){return new ApiInfoBuilder().title(外卖平台).version(1.0).description(外卖平台接口文档).build();} 3、设置静态资源映射(WebMvcConfig类中的addResourceHandlers方法)否则接口文档页面无法访问
registry.addResourceHandler(doc.html).addResourceLocations(classpath:/META-INF/resources/);
registry.addResourceHandler(/webjars/**).addResourceLocations(classpath:/META-INF/resources/webjars/);
4、在loginCheckFilter中设计不需要处理的请求路径 配置完成访问端口加doc.htm就可以获得所有 swagger常用注释 这些注解的作用是让生成的 接口文档效果更好
比如在套餐中加
加之前 加之后 就有了相应的说明更加的直观