目录
1.今天所学内容摘要:
数据库读写分离
//Sharding-JDBC(用于数据库读写分离的框架) //1.导入依赖 <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>4.0.0-RC1</version> //2.在配置文件中配置读写分离规则 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.56.100:3306/reggie?characterEncoding=utf-8 username: root password: root001 # 从数据源 slave: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.56.101:3306/reggie?characterEncoding=utf-8 username: root password: root001 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 //3.在配置文件中配置允许bean定义覆盖配置项 main: allow-bean-definition-overriding: true
注意:配置完这一部分内容后,还需要将两台服务器打开,同时要运行mysql服务,进行相应配置,当确保两个数据库之间有关联了之后,在运行服务器;
Nginx服务
//重点目录/文件 conf/nginx.conf //nginxi配置文件: html //存放静态文件(html、csS、Js等)】 logs //日志目录,存放日志文件 sbin/nginx //二进制文件,用于启动、停止Nginx服务 //在nginx的sbin目录中执行: ./nginx //启动Nginx服务 ./nginx -s stop //停止Nginx服务 //在nginx的conf目录中执行: nginx -s reload //重新加载配置文件
拓展:树状目录结构展示tree命令,安装 yum install tree;当在/etc/profile配置文件中配置了Nginx的环境变量后,在哪里都可以执行Nginx的相关语句;
Nginx配置
//Nginxi配置文件(conf/nginx.conf)整体分为三部分: 全局块 //和Nginxi运行相关的全局配置 events块 //和网络连接相关的配置 http块 //代理、缓存、日志记录、虚拟主机配置 //负载均衡 upstream targetserver{ //upstream指令可以定义一组服务器 server 192.168.56.101:8080 负载均衡策略; //默认策略是以轮询的方式访问两台服务器 server 192.168.56.101:8081 负载均衡策略; } //反向代理配置 server{ listen 82; //端口号 server name localhost; //服务器名称 location / { //匹配客户端请求url proxy_pass http://192.168.138.101:8080; //反向代理配置,将请求转发到指定服务 //proxy_pass http://targetserver; 负载均衡配置 } }
注意:
-
http块中可以配置多个Server块,每个Server块中可以配置多个location块;
-
反向代理是指客户端与目标服务端之间有一个代理服务器,客户端以为自己访问的是目标服务端其实访问的是代理服务端,而代理服务端负责从目标服务端获取数据返回给客户端;(不知道有代理服务端存在)
-
正向代理是指客户端访问代理服务端,通过代理服务端到目标服务端获取数据;(知道代理服务端存在)
-
负载均衡其实是基于反向代理的原理实现的,负载均衡可以匹配多个服务器是由upstream指令设置完成的,然后将反向代理的单个IP换成一组服务器
YApi
源码地址:GitHub - YMFE/yapi: YApi 是一个可本地部署的、打通前后端及QA的、可视化的接口管理平台
注意:我这里使用Apifor代替了YApi的功能实现
Swagger
//操作步骤 //1、导入knife4j的maven坐标 <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>3.0.2</version> //2、导入knife4j相关配置类 @EnableSwagger2 //加在webMvcConfig类的上方 @EnableKnife4j //加在webMvcConfig类的上方 @Bean public Docket createRestApi() { // 文档类型 return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.example.reggie.controller")) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("瑞吉外卖") .version("1.0") .description("瑞吉外卖接口文档") .build(); } //3、设置静态资源:否则接口文档页面无法访问 registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); //4、在LoginCheckFilter中设置不需要处理的请求路径 "/doc.html", "/webjars/**", "/swagger-resources", "/v2/api-docs"
注意:Swagger的使用还需要搭配上常用注解,作用是用于描述类、属性、方法等的说明,具体使用网上查阅即可;
项目部署
//部署环境说明 服务器: 192.168.56.100(服务器A) Nginx:部署前端项目,配置反向代理 Mysql:主从复制结构中的主库 192.168.56.101(服务器B) jdk:运行java项目 git:版本控制工具 maven:项目构建工具 jar:SpringBoot项目打成Jar包基于内置Tomcat运行 Mysql:主从复制结构中的从库 127.0.0.1(服务器C) Redis:缓存中间件
//部署前端项目 1.在服务器A中安装Nginx,将课程资料中的dist目录(前端打包目录)上传到Nginx的html目录下 2.修改Nginx配置文件nginx.conf location / { root html/dist; index index.html; } //反向代理配置 localtion ^~ /api/ { rewrite ^/api/(.*)$ /$1 break; proxy_pass http://192.168.56.101:8080; } //部署后端项目 1.在服务器B中安装jdk、git、maven、mysql,使用git clone命令将git远程仓库的代码克隆下来 2.将资料中提供的reggieStart.sh文件上传到服务器B,通过chmod命令设置执行权限 3.执行reggieStart.sh脚本文件,自动部署项目
2.所遇到的问题描述:
报错:Access denied for user 'root'@'192.168.56.1' (using password: YES)
解决:修改slave从库的密码为root001
原因:从库密码输入错误,写成了权限用户的密码
3.扩展学习部分:
4.学习总结:
-
今天主要是结束了外卖项目的项目部署部分,总体来说还可以,但是也出现了问题;比如说在IDEA中可以运行的代码到了部署中无法正常运行,对于图片明明以及放置了但是却还是不显示等问题;目前还没结局,这一部分内容涉及到前端部署,暂时不了解前端内容,以及前端打包方式,需要搁浅一下,后续学会了会反过来修复;对于项目的部署主要就是先对代码进行缓存优化,然后将数据库实现主从分离,其次是部署Nginx服务器转移前端资源,最后才是部署后端的资源,启动部署项目测试;今天学习还行,但是对于错误的处理不太理想