JWT
JWT(JSON Web Token)是一种用于在网络应用间传递信息的安全标准。JwtTool生产成
三个部分组成:头部(Header)、载荷(Payload)和签名(Signature)。
工作流程如下:
1. 用户提供身份验证凭证(例如用户名和密码)进行身份验证。
2. 服务器验证用户凭证的有效性,并生成一个 JWT。
3. 服务器将 JWT 返回给客户端。
4. 客户端将 JWT 存储在本地(通常是在浏览器的本地存储或 Cookie 中)。
5. 客户端在后续的请求中将 JWT 作为身份验证凭证传递给服务器。(拦截器)
6. 服务器验证 JWT 的签名和有效期,并根据其中的信息进行授权和身份验证。
注册中心
注册中心 eureka ,Nacos(服务治理,)
心跳 ,续约,推送改变,注册-发现,健康监控
eureka :集群部署
Nacos:
服务分级存储模型-集群概念 服务-集群-实例
还支持配置管理、动态路由、流量管理和服务熔断等
负载均衡:集群优选轮询,权重(0-1)
环境隔离:就是新建分组 sit或uat
eureka和Nacos区别
CAP理论,Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性),
*心跳:Nacos有临时实例(自己发给注册中心,不健康会剔除) 和非临时实例(注册中心主动发,不健康改状态)更新及时
*消费者推送:e只是pull N有pull和push
*eureka(AP)和Nacos(CP)
*Nacos配置管理
Nacos统一配置管理(配置热更新)
*类似Spring Cloud Config
*正常流程 项目启动---读取本地.yml文件 --创建spring容器--加载bean
*流程 项目启动----(bootstrap.yml)--(读取nacos配置)---读取本地.yml文件 --创建spring容器--加载bean
*bootstrap.yml 引导文件 优先级高于 application.yml
步骤1 在Nacos添加配置,服务添加bootstrap.yml配置
步骤2 服务 配置自动刷新
2.1在@Value注入的变量所在类添加@RefreshScope
2.2使用@ConfigurationProperties(自动注入配置文件的值)
负载均衡 Ribbon(配置文件配置)
1. Round Robin(轮询)默认:按照顺序依次将请求分发给不同的服务实例。
2. Random(随机):随机选择一个服务实例来处理请求。
3. Weighted Round Robin(加权轮询):根据服务实例的权重,按照一定顺序将请求分发给不同的服务实例。
4. Weighted Random(加权随机):根据服务实例的权重,随机选择一个服务实例来处理请求。 5. Availability Filter(可用性过滤):排除掉故障或不可用的服务实例,然后再根据其他策略进行负载均衡。
6. Response Time(响应时间):根据服务实例的平均响应时间,选择响应时间最短的服务实例来处理请求。
7. Best Available(最佳可用):选择状态为"UP"(可用)的服务实例中,响应时间最短的服务实例来处理请求。
8. Zone Avoidance(区域避免):避免将请求发送到与调用方处于同一区域的服务实例,以提高系统的可用性和稳定性。
懒加载: 第一次使用的时候加载 第一次请求会比较慢
饥饿加载:启动就加载
远程调用
restTemplate
feign-声明式客户端-远程调用
替代restTemplate
集成了负载均衡 ribbon(默认)
集成hystrix
自定义配置
*日志级别(feign.logger.level):4种(没有 (默认),基础,请求头,全部) 配置全局或者某个
常用(最好选择 没有 ,基础)提高性能
*失败重试(feign.Retryer):请求失败重试,默认没有,不过ribbon是重试的 就是默认有
响应结果解析:例如将json转java对象
支持的注解格式:默认springMVC的注解
feign性能优化
*底层使用 URLConnection 不支持连接池 (默认的)
httpClient 支持连接池
OKhttp 支持连接池
优化1:使用httpClient或者OKhttp去替代 配置开启连接池
优化2:日志 最好选择 没有 ,基础提高性能
feign最佳是实现
继承:controller和feignClient继承相同接口 缺点耦合度高
抽取:将feign抽取出独立模块 缺点:很大用不到的代码也必须一起加进来
Gateway统一网关
作用
*身份证验证
*服务路由和负载均衡
*请求限流
选择
*Gateway 响应式(更好)
*Zuul 阻塞的
搭建(3服务)
创建服务
配置路由(id /地址/ 断言(**/usr) 过滤器(处理请求或者响应))
断言工厂
path(默认)
哪个时间之前 ,之后 , 之间,
请求cookie, head 包含什么
指定host ,请求方式, 指定参数
ip范围 权重
GatewayFilter过滤器(过滤器链)
过滤器工厂
添加移除 请求头,添加异常响应头 , 限制流量
GlobalFilte全局过滤器可以自定义过滤逻辑(登陆模块)
网关-跨网问题处理(域名或端口不一样,浏览器禁止)
CORS(浏览器询问-服务器)
雪崩
hystrix
sentinel图像化
分布式事务
seata框架
TC (Transaction Coordinator) - 事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚。
TM (Transaction Manager) - 事务管理器
定义全局事务的范围:开始全局事务、提交或回滚全局事务。
RM (Resource Manager) - 资源管理器
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
AT模式 保存补偿操作
XA 未提交阻塞
spring boot的自动配置原理
Spring Boot 的自动配置原理是通过 @EnableAutoConfiguration 注解来实现的。
@EnableAutoConfiguration 注解会扫描当前项目的依赖,并根据依赖的 jar 包中的 META-INF/spring.factories 文件中的配置,自动配置 Spring 容器。
META-INF/spring.factories 文件中包含了 Spring Boot 自动配置的各种配置类,这些配置类会根据当前项目的依赖,自动配置 Spring 容器。
例如,如果当前项目依赖了 Spring Boot 的 web 模块,那么 Spring Boot 就会自动配置 Spring MVC 和 Tomcat。
另外,Spring Boot 还提供了 @ConfigurationProperties 注解,可以用来在配置文件中配置 Spring 容器的属性。
@ConfigurationProperties 注解会扫描当前项目的配置文件,并根据配置文件中的配置,自动配置 Spring 容器。
例如,如果当前项目的配置文件中配置了 spring.datasource.url 属性,那么 Spring Boot 就会自动配置数据源。
总之,Spring Boot 的自动配置原理是通过 @EnableAutoConfiguration 注解和 @ConfigurationProperties 注解来实现的。
通过这些注解,Spring Boot 可以自动配置 Spring 容器,从而简化了 Spring 的开发。
SpringBoot 自动配置就是基于SpringFactories 机制获取对应依赖META-INF目录下的 spring.factories 文件中的需要自动配置的类的全限定名信息,然后根据这些信息将我们需要的使用的 Bean 对象放到 IOC 容器中,当我们需要使用时,通过依赖注入机制直接注入使用即可
SpringFactories 机制
是 Spring 框架提供的一种扩展机制,用于在应用程序启动时自动加载并配置一些扩展类。具体来说,该机制通过在类路径下的 META-INF/spring.factories 文件中定义一些扩展类的全限定类名,然后在应用程序启动时自动扫描该文件,并加载其中的扩展类。
SpringFactories 机制的实现过程如下:
1,在类路径下的 META-INF/spring.factories 文件中定义一些扩展类的全限定类名。
2,在应用程序启动时,使用 ClassLoader 加载 META-INF/spring.factories 文件,并解析其中定义的扩展类名。
3,根据扩展类名使用反射机制动态创建扩展类的实例,并将其注册到相应的容器中。例如,在 Spring Boot 应用程序中,自动配置类会被注册到 Spring 容器中,并在应用程序启动时自动配置。
SpringFactories 机制的优点是可以极大地降低应用程序的配置难度,提高开发效率。在 Spring Boot 应用程序中,该机制被广泛应用于自动配置、自定义 Starter、插件等领域。
为什么spring boot的jar可以直接运行
springboot 提高一个插件spring-boot-maven-plugin用于把程序打包成为一个可运行的jar包
Spring Boot 是一个基于 Spring 框架的微服务开发框架,它提供了自动化配置的功能,使得开发者可以更快速地搭建 Spring 应用。Spring Boot 的 jar 可以直接运行的原因如下:
- 内嵌式容器
Spring Boot 内置了一个容器,可以用来管理 Spring 组件。这个容器可以自动扫描项目中的依赖,并将其添加到容器中。同时,它还可以自动配置类、实现依赖注入等。
- 嵌入式 Web 服务器
Spring Boot 还内置了一个嵌入式的 Web 服务器,如 Tomcat、Jetty 等。这样,开发者可以在不编写任何 Web 应用程序代码的情况下,快速搭建一个 Web 应用程序。
- 自动配置
Spring Boot 提供了自动配置的功能,可以自动配置 Spring 组件,如数据源、消息队列、缓存等。开发者不需要手动编写配置代码,可以大大提高开发效率。
- 快速开发
Spring Boot 提供了快速开发的功能,如嵌入式 Web 应用程序、starter 依赖等。这些功能可以帮助开发者快速开发应用程序,并在短时间内完成开发任务。
总的来说,Spring Boot 的 jar 可以直接运行的原因是它提供了内嵌式容器、嵌入式 Web 服务器、自动配置和快速开发等功能,使得开发者可以快速搭建 Spring 应用,并提高开发效率。
这么spring boot优化启动速度
*配置懒加载,
*
Spring Boot 解决跨域问题可以通过以下几种方式:
1,使用 CORS 过滤器
Spring Boot 读取配置文件
@Value,
@Configuration 获取多个
@Environment
如果配置文件中的属性与 Java 实体类中的属性不同名,可以使用 @Environment 注解获取配置文件中的属
@PropertySource 获取外部配置
SpringBoot的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面的注解是@SpringBootApplication,它也是SpringBoot的核心注解 主要组合包含了以下 3 个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能, 也可以关闭某个自动配置的选项,比如关闭数据源自动配置功能:
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描。