Spring全家桶

《Spring》

Spring的架构体系:spring是一个基于java语言写的一个轻量级的一站式解决方案框架,它的最底层是核心容器,在核心容器上面提供了AOP这些中间层技术,然后再往上就可以去集成别人的技术,比如像Dao层的MyBatis、JDBC,这是它的数据层的解决方案。在Web层也能集成别人的技术,比如WebWork,它也有自己的Web层技术,比如SpringMVC。
**IOC:**可以比作一个容器,里面装的是类的资源,帮助我们管理资源。(在用spring之前,调用类资源都需要去创建类才能调用)
AOP(Aspect Oriented Programming)面向切面编程: 简单来说,AOP是一种编程范式,指导开发者如何组织程序结构,最终目标是实现插拔式组件体系结构。AOP优势:提高代码的可重用性,业务代码编码更简洁,业务代码维护更高效,业务功能扩展更便捷。aop的底层原理:装饰模式,在原有的基础上进行增强。

bean标签的属性:scope
作用:定义bean的作用范围
取值:
singleton:单列模式:创建spring容器的时候,bean被创建。
prototype:非单列模式:只有在获取bean的时候才会创建bean,并且是获取一次创建一次。
区别:单例模式:加载好对象,用的时候给你。非单例:用的时候再创建对象。

常用注解
使用注解前,需要启动注解功能
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用@Configuration、@ComponentScan两个注解,替代spring核心配置文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

**spring事务:**对业务层的代码事务管理,保证数据的一致性。(注意区别:mysql的事务是对数据层事务管理)
在这里插入图片描述
在这里插入图片描述

《SpringMVC》

**SpringMVC:**是一种基于Java实现MVC模型的轻量级Web框架。
**SpringMVC优点:**使用简单;性能突出(相比现有的框架技术),灵活性强。
在这里插入图片描述在这里插入图片描述
请求
在这里插入图片描述
在这里插入图片描述
普通类型参数传参
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
响应
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
表单校验
在这里插入图片描述
在这里插入图片描述

《SpringBoot》

在这里插入图片描述

《SpringCloud》

SpringCloud就是把别人的框架整合起来,然后用SpringBoot简化了开发和配置,SpringCloud是基于SpringBoot做开发的。

SpringCloud版本的命名方式采用了伦敦地铁站的名称,从最早到现在:Angel、Brixton、Camden、Dalston(1.5.x)、Edgware(1.5.x)、Finchley(2.0.x)、Greenwich(2.1.x)、Hoxton(2.2.x)。后面是各个版本对应SpringBoot的版本。

**微服务:**将原本独立的系统拆分成多个小型的服务,这些小型的服务都可以在各自独立的进程中运行,服务之间一般通过HTTP的RESTfuLAPI进行通信协作【Dubbo使用的是RPC通讯协(RPC是底层协议,效率略高于SpringCloud),SpringCloud是上层协议(RESTfuL),但功能更全】。由于有了轻量级的通信协议作基础,所以这些微服务可以用不同的语言来编写。

注册中心

**Eureka注册中心(包含服务治理):**是Netfix公司开源的一个服务注册与发现组件。Provider(提供方/服务端)、Consumer(消费方/客户端)、Registry(注册中心)。
Eureka包含两个组件:Eureka Server(注册中心)和Eureka Client(服务提供者、服务消费者)。
Eureka自我保护机制
注册中心配置【eureka: server: enable-self-preservation:(是否开启自我保护机制,默认true) eviction-interval-timer-in-ms:(清理间隔(单位毫秒,默认是60*1000))】
服务端(提供方)配置:eureka: instance: lease-renewal-interval-in-seconds: (每一次服务端向注册中心发送心跳的时间间隔) lease-expiration-duration-in-seconds: (剔除时间,如果注册中心在这个时间内没有收到服务端的心跳包,则剔除该服务)
(注:注册中心开启自我保护机制时,未在规定的时间内发送心跳包给注册中心的服务,会被假剔除,防止网络延迟或某些原因造成的服务假死从而提升效率)
Eureka高可用(集群):分别配置不同的注册中心,注册中心之间相互注册,将服务端分别注册到所有的注册中心中。优点:其中任意一台注册中心服务器挂掉了,可以通过别的注册中心进行访问。

Consul注册中心:是由HashiCorp基于Go语言开发的,支持多数据中心,分布式高可用的服务发布和注册服务软件。

Nacos注册中心:SpringCloud注册中心+SpringCloud配置中心,官网:https://nacos.io/ 下载地址:https://github.com/alibaba/nacos/releases,
下载完成后:nacos文件下bin目录下有一个startup.cmd直接双击启动(Windows命令脚本),另一个是startup.sh是Linux执行文件;
运行成功后:在浏览器输入localhost:8848/nacos/#,用户名和密码都是nacos。
优点:只需要将nacos的maven依赖导入,然后在客户端和消费端yml配置nacos服务端地址。
(注:SpringCloud官网中有一个SpringCloud Alibaba模块,是Alibaba捐献给SpringCloud的开源组件,里面有一些二次封装的功能)

Ribbon客户端负载均衡

【****先了解一下负载均衡有两种,**服务端负载均衡:**负载均衡算法在服务端,由负载均衡器维护服务地址列表。**客户端负载均衡:**负载均衡算法在客户端,客户端维护服务地址列表。】

Ribbon是Netflix提供的一个基于HTTP和TCP的客户端负载均衡工具。主要有两个功能1、简化远程调用;2、负载均衡。

使用Ribbon简化restTemplate调用:1、在声明restTemplate的Bean时候,添加一个注解:@LoadBalanced;2、在使用restTemplate发起请求时,需要定义url时,host:port可以替换为服务提供方的应用名称。

负载均衡策略
1、随机(RandomRule);2、轮询(RoundRobinRule);3、最小并发(BestAvailableRule);4、过滤(AvailabilityFilteringRule);
5、响应时间(WeightedResponseTimeRule);6、轮询重试(RetryRule);7、性能可用性(ZoneAvoidanceRule)。

设置负载均衡策略的方式
1、编码:【①在消费端启动类上加注解**@RibbonClient(name=“设置服务提供方的应用名称”,configuration=设置负载均衡Bean,列如MyRule.class)**;②创建MyRule类(类上加注解@Configuration),类中写返回值为IRule的方法,return 的就是负载均衡的策略
2、配置:【在消费者的application.yml文件中配置:设置服务提供方的应用名称和选用策略类(EUREKA-PROVIDER: ribbon: NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule)】。

Feign声明式服务调用

Feign是一个声明式的REST客户端,基于接口的注解方式,很方便实现客户端配置。最初Feign是由Netflix公司提供,但不支持SpringMVC注解,后由SpringCloud对其封装,支持了SpringMVC的注解。所以导入的坐标一般是open-feign,而不是原生的feign。
调用步骤:
1、在消费端引入open-feign依赖;
2、编写Feign调用接口(添加注解@FeignClient(value=“服务提供者的应用名称”));
3、在需要调用的服务controller层注入接口(需要在controller类上添加注解@RequiredArgsConstructor);
4、在启动类添加@EnableFeignClients注解,开启Feign功能。

超时设置:Feign底层依赖于Ribbon实现负载均衡和远程调用。Ribbon默认1秒超时。
【application.yml配置:ribbon: ConnectTimeout: 1000(连接超时时间 默认1s)ReadTimeout: 3000(逻辑处理的超时时间 默认1s)】
日志记录:1、Feign只能记录debug级别的日志信息(logging: level: com.xxxxxxx.debug);2、定义Feign日志级别Bean(@Bean
Logger.level feignLoggerLevel(){return Logger.Level.FULL;});3、启用该Bean:@FeignClient(configuration=XxxConfig.class)。

Hystrix熔断器

Hystrix是Netflix开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败(雪崩)。
雪崩:一个服务失败,导致整条链路的服务都失败的情形。
Hystrix主要功能
1、服务隔离(①线程池隔离;②信号量隔离。)
2、服务降级:当服务发生异常或调用超时,返回默认数据。
提供方降级:1、在服务提供方引入hystrix依赖;2、定义降级方法;3、使用注解配置降级方法@HystrixCommand(fallbackMethod=“上一步定义的降级方法名称”,commandProperties={另外设置超时时间的注解是 @HystrixProperty(name=" ",value=“3000”)}),;4、在启动类上开启Hystrix功能:@EnableCircuitBreaker
消费方降级:1、feign组件已经集成了hystrix组件;2、定义feign调用接口实现类,复写方法,即降级方法;3、在@FeignClient注解中使用fallback属性设置降级处理类;4、application.yml配置开启feign.hystrix.enabled=true
(如果提供方和消费方都有服务降级机制,这时优先返回提供方降级数据。)
3、熔断机制:用于监控微服务调用情况,当失败的情况达到预定的阈值(5秒失败20次),会打开断路器,拒绝所有请求,直到服务恢复正常为止。【断路器有三种状态:关闭()、打开()、半开()。正常情况下是关闭状态,当失败情况达到预定的阈值断路器自动打开,拒绝所有请求,当断路器开启时间达到5s(默认5s),会变为半开状态,放一个请求进来尝试,如果失败继续打开断路器,如果成功,调用成功的次数达到阈值就会关闭断路器。】
4、限流

Gateway网关

网关是在微服务架构提供一种简单而有效的统一的API路由管理方式。简单来说:网关是系统的入口,封装了应用程序的内容结构,为客户端提供统一的服务,一些与业务本身功能无关的公共逻辑可以在这里实现,诸如认证、鉴权、监控、缓存、负载均衡、流量管控、路由转发等。
实现步骤:1、搭建网关模块;2、引入依赖:starter-gateway;3、编写启动类;4、编写配置文件;5、启动测试。
静态路由:uri: http://localhost:8001/ (缺点:服务端修改了地址,网关配置也需要改。应使用动态路从注册中心获取服务地址。
动态路由配置:引入eureka-client配置,修改uri属性:uri: lb//服务名称。
Gateway过滤器:Gateway支持过滤器功能,对请求或响应进行拦截,完成一些通用操作。Gateway提供两种过滤器方式:“pre”和“post”。
pre过滤器,在转发之前执行,可以做参数校验、权限校验、流量监控、日志输出、协议转换等。
post过滤器,在响应之前执行,可以做响应内容、响应头的修改,日志的输出,流量监控等。
Gateway还提供了两种类型过滤器GatewayFilter:局部过滤器,针对单个路由。GlobalFilter:全局过滤器,针对所有路由。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬砖的小李同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值