SpringCloud01
SpringCloud011.认识微服务随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢?
1.0.学习目标了解微服务架构的优缺点
1.1.单体架构单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。
单体架构的优缺点如下:
优点:
架构简单
部署成本低
缺点:
耦合度高(维护困难、升级困难)
1.2.分布式架构分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。
分布式架构的优缺点:
优点:
降低服务耦合
有利于服务升级和拓展
缺点:
服务调用关系错综复杂
分布式架构虽然降低了服务耦合,但是服务拆分时也有很多问题需要思考:
服务拆分的粒度如何界定?
服务之间如何调用?
服务的调用关系如何管理?
人们需要制定一套行之有效的标准来约束分布式架构。
1.3.微服务微服务的架构特征:
单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
自治:团队独立、技术独立、数据独立,独立部署和交付
面向服务:服务提供统一标准的接口,与 ...
SpringCloud02
SpringCloud020.学习目标1.Nacos配置管理Nacos除了可以做注册中心,同样可以做配置管理来使用。
1.1.统一配置管理当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。
Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。
1.1.1.在nacos中添加配置文件如何在nacos中管理配置呢?
然后在弹出的表单中,填写配置信息:
注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。
1.1.2.从微服务拉取配置微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。
但如果尚未读取application.yml,又如何得知nacos地址呢?
因此spring引入了一种新的配置文件:bootstrap.yaml文件,会在application.yml之前被读取,流程如下:
1)引入nacos-confi ...
Mysql读写分离
Mysql读写分离让项目读写分离,写走主库,读走从库,从单一的一台数据库到多台数据库,访问压力降低。将主库的数据同步到从库来这种结构叫Mysql主从复制。
Mysql主从复制MySQL主从复制是一个异步的复制过程,底层是基于MySQL数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具。
介绍MySQL复制过程分成三步:
master将改变记录到二进制日志(binary log)
slave将master的binary log拷贝到它的中继日志(relay log)
slave重做中继日志中的事件,将改变应用到自己的数据库中
二进制日志:二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但是不包括数据查询语句。此日志对于灾难时的数据恢复起着极其重要的作用,MySQL的主从复制, 就是通过该binlog实现的。默认 ...
瑞吉项目技术栈
瑞吉项目技术栈项目开发静态资源路径映射
用于向springboot指定静态资源路径
如果没有配置springboot会从默认位置寻找静态资源
R类处理响应结果
通用返回结果,服务端返回相应的结果此对象
前端接收该对象(响应码、错误信息、成功数据等json数据)
Dto实体类扩展
扩展实体类的属性,一般用于多表数据操作
登录过滤器
配置过滤器
放行登录页面、登录登出请求等
过滤未登录请求
启动类添加@ServletComponentScan,Filter可以直接通过@WebFilter注解自动注册
自定义业务异常
通过trow关键字抛出自定义异常
设置异常信息
全局异常处理器
捕获controller中出现的异常
捕获抛出的自定义业务异常
将异常信息响应给前端
MP分页插件
配置MP的分页插件
使用分页构造器
对象映射器(MVC消息转换器)
对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象
MVC消息转换器:设置对象转换器,底层使用Jackson将Java对象转json
自定义元数据对象处理器
公共字段自动填充 ...
Reggie项目部署
Reggie项目部署企业级项目部署架构图
瑞吉项目部署架构
项目环境说明
部署前端项目在服务器A中安装nginx,将前端项目打包后的dist文件上传到nginx的html目录下。
修改nginx的配置文件,使得默认访问的路径为项目的首页,并配置接口请求的反向代理规则。
部署后端项目修改项目的图片路径地址,并将图片资源上传到服务器B指定的位置。
在服务器B中安装Git、Maven工具,编写自动项目部署shell脚本(Git拉取远程仓库最新后端代码,Maven对代码进行打包,最后通过 java -jar 项目jar包名运行后端项目。),运行脚本。
Doker瑞吉项目部署
docker项目部署简介首先通过maven工具将微服务项目进行打包,然后通过Dockerfile将微服务jar包构建成docker镜像,配置nginx、redis,最后通过docker-compose工具实现对Docker容器集群的快速编排,微服务项目进行一键部署。
IDEA修改配置文件:
123456789101112131415161718192021222324252627spring: datasource: druid: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://mysql:3306/reggie?characterEncoding=UTF-8&useSSL=false # 在docker中使用服务名即可 username: root password: 123456 # redis相关配置 redis: host: redis # 在docker中使用服务名即可 port: 6379 ...
Git入门
Git入门Git简介GIT,全称是分布式版本控制工具,通常用来对软件开发中的源代码文件进行管理。通过Git仓库来存储和管理这些文件,Git仓库分为两种:
本地仓库:开发人员再自己电脑上的Git仓库。
远程仓库:远程服务器上的Git仓库。
git的作用:
代码回溯
版本切换
多人协作
远程备份
commit:提交,将本地文件和版本信息保存到本地仓库。
push:推送,将本地仓库文件和版本信息上传到远程仓库。
pull:拉取,将远程仓库的文件和版本信息下载到本地仓库。
Git下载和安装在git官网下载后,默认安装就行!
安装完成后再任意目录点击鼠标右键,如果能看到下列Git相关选项表示安装成功。
Git GUI Here:打开Git图形界面。
Git Bash Here:打开Git命令行。
Git代码托管服务常用的Git代码托管服务平台:
gitHub( 地址:https://github.com/ )是一个面向开源及私有软件项目的托管平台,因为只支持Git 作为唯一的版本库格式进行托管,故名gitHub。
码云(地址: https://gitee.com/ )是国内的 ...
JavaScript入门
JavaScript入门1、什么是javascript
JavaScript 是一种脚本,一门编程语言,它可以在网页上实现复杂的功能,网页展现给你的不再是简单的静态信息,而是实时的内容更新,交互式的地图,2D/3D 动画,滚动播放的视频等等。
ES6就是ECMAScript6是新版本JavaScript语言的标准,它的目标是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
javaScript历史:https://blog.csdn.net/kese7952/article/details/79357868
2、快速入门2.1、引入javaScript1、内部标签
123<script> js代码块</script>
2、外部引入
hello.js
12alert("hello,world");alert("😣✅❌");
helloword.html
123456<!--外部引入 注意:script必须成对出现--> <script src=&quo ...
Java多线程
Java多线程Java多线程线程的理解程序(programm):是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码。
进程(process):程序的一次执行过程,或是正在运行的一个程序。
说明:进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域。
线程(thread):进程可进一步细化为线程,是一个程序内部的一条执行路径。
说明:线程作为调度和执行的单位,每个线程拥独立的运行栈和程序计数器(pc),线程切换的开销小。
内存结构:
补充:
进程可以细化为多个线程。
每个线程,拥有自己独立的:栈、程序计数器。
多个线程,共享同一个进程中的结构:方法区、堆。
并行与并发单核CPU与多核CPU的理解:
单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务。
如果是多核的话,才能更好的发挥多线程的效率。(现在的服务器都是多核的)
一个Java应用程序java.exe,其实至少三个线程:main()主线程,gc()垃圾回收线程,异常处理线程。当然如果发生异常,会影响主线程。
并行与并发的理解:
并行:多个CPU ...
Java常用类
Java常用类常用类Object类Object类的使用:
Object类是所有Java类的根父类。
如果在类的声明中未使用extends关键字指明其父类,则默认父类是java.lang.Object类。
Object类中的功能(属性、方法)具有通用性。
==和equals()方法对比:
==:
基本类型比较值,只要两个变量的值相等,即为true
引用类型比较引用地址(是否指向同一个对象):只有指向同一个对象时,==才返回true
用“==”进行比较时,符号两边的数据类型必须兼容(可自动转换的基本数据类型除外),否则编译出错
equals():
所有类都继承了Object,也就获得了equals()方法。只能比较引用类型,其作用与“==”相同,比较是否指向同一个对象
对类File、String、Date及包装类 (Wrapper Class)来说,是比较类型及内容而不考虑引用的是否是同一个对象,因为在这些类中重写了Object类的equals()方法
当自定义使用equals()时,可以重写。用于比较两个对象的“内容”是否都相等
重写equals方法:
12345678910 ...