Spring全家桶

2023-11-15

《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:全局过滤器,针对所有路由。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring全家桶 的相关文章

随机推荐

  • Dropdown 下拉框(el-dropdown-menu)内容过长显示‘...’ 鼠标悬浮显示全部

    问题描述 使用element的Dropdown 下拉框 el dropdown menu 内容过长显示 鼠标悬浮显示全部 有时候内容太长导致文字换行与其它文字折叠展示 如下图所示 解决方案 直接上代码
  • PVE虚拟化平台之安装iStoreOS软路由系统

    PVE虚拟化平台之安装iStoreOS软路由系统 一 iStoreOS介绍 二 登录PVE平台检查系统状态 三 创建虚拟机 1 虚拟机常规设置 2 操作系统配置 3 系统配置 4 磁盘配置 5 CPU配置 6 内存设置 7 网络设置 8 确
  • plt.subplots()

    首先一幅Matplotlib的图像组成部分介绍 在matplotlib中 整个图像为一个Figure对象 在Figure对象中可以包含一个或者多个Axes对象 每个Axes ax 对象都是一个拥有自己坐标系统的绘图区域 所属关系如下 sub
  • Python操作ElasticSearch条件查询

    一 基本操作 1 列表元素之一查询 如 terminalType pc mobile 正确用法 GET http 0 0 0 0 8200 amis action data data search size 10000 查询条件 Ps 数组
  • 【转】内存数据库、关系型数据库和非关系型数据库

    内存数据库 关系型数据库和非关系型数据库 一 内存数据库 关系型数据库和非关系型数据库 1 个人观点 二 内存数据库 Redis MongoDb SQLite Oracle等 三 Raft分布式协议 四 Redis出现宕机 如何保证数据不丢
  • python极限学习机ELM做一个简单的分类

    最近事太多 只能下班后挤时间学习 缓慢更新 华丽的分割线 极限学习机是我们实验室的元老了 是一种单隐层前馈神经网络 SLFN 学习算法 这种算法只需要设置网络的隐层节点个数 执行过程中不需要调整网络的输入权值以及隐元的偏置 并且产生唯一的最
  • 哈希表查找——成功和不成功时的平均查找长度

    哈希表查找 成功和不成功时的平均查找长度 以下求解过程是按照 计算机统考的计算方法 不同的老师 教材在 处理冲突 上可能会有不同的方法 所以最主要的是掌握原理即可 对于考研的朋友最好掌握统考真题的解题方法 题目 例子 2010年全国硕士研究
  • 13.Python列索引值

    1 基础Python vi 6csv reader column by index py encoding utf 8 usr bin env python3 import csv import sys input file sys arg
  • mmsegmentation V0.27.0环境搭建(一)

    1 官网 2 兼容的MMSegmentation和MMCV版本如下 请安装正确版本的MMCV 以避免安装问题 3 Installation Linux系统环境安装 1 创建虚拟环境并安装pytorch Step 1 Create a con
  • ProtoBuf-反射原理与使用

    文章目录 前言 相关应用场景 一 ProtoBuf 反射原理概述 1 获取message和service的属性和方法 1 1 使用protoc将proto文件生成 h和 cc文件 1 2 只使用proto文件 不使用protoc进行编译 1
  • Gvim高级操作006--verilog例化代码对齐

    Gvim高级操作006 verilog例化代码对齐 Gvim如果没有安装对齐插件的情况下 无法通过快捷操作实现verilog例化代码对齐 但是可以通过正则表达式匹配插入空格实现代码对齐 基本原理是 删除空格 点号 和信号之间不能有空格 左括
  • FastCFS binlog机制简介

    FastCFS binlog机制简介 本篇文章转载于 FastCFS 作者 余庆 大佬的 FastDFS分享与交流 公众号 FastCFS 采用经典的 Master Slave 结构及数据同步复制的做法 如果 slave 在线 master
  • JDK 各版本汇总表

    提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 JDK各版本 时间表 二 JDK各版本 新特性 JDK4 JDK5 JDK6 JDK7 JDK8 JDK9 JDK10 JDK11 JDK12 JDK13 JD
  • Android 蓝牙打印机Service Intent must be explicit

    安卓htc m8手机 链接蓝牙热敏打印机 佳博gp5890xIII 提示 Service Intent must be explicit 根据打印机官方提供的demo 修改为 private void connection conn new
  • 【基础知识】智能指针shared_ptr、weak_ptr、unique_ptr

    目录 一 shared ptr 共享智能指针 1 初始化 1 use count 成员函数 2 构造函数初始化 3 拷贝构造和移动构造函数初始化 4 std make shared 初始化 5 reset方法初始化 2 获取原始指针 二 w
  • 2019/5/13 基于模型的强化学习方法

    注 论文写作四项工作 工作一 查阅100篇 挑选30篇 核心参考3 5篇 看懂 一篇 工作二 提出难点问题 提出新概念 例 多光谱 注意力机制 工作三 修改算法 网络结构 损失函数 步数 工作四 写写写 改改改 图片精修 丰富实验 首句中心
  • ARM64撬开逆向大门

    图片
  • QML和QWidget混合开发(初探)

    为什么要搞混合开发 Qml已经越来越成为Qt开发的主流 相比与QWidget的界面开发更快 也更容易上手 实现效果上也更好 但老旧项目都是QWidget的框架 大家不可能一次性的把QWidget项目界面全部换成qml 这时候我们可以将新开发
  • python条件运算符_Python中的条件运算符

    python条件运算符 如果条件运算符 if else conditional operator Just like other programming languages Python also provides the feature
  • Spring全家桶

    Spring Spring的架构体系 spring是一个基于java语言写的一个轻量级的一站式解决方案框架 它的最底层是核心容器 在核心容器上面提供了AOP这些中间层技术 然后再往上就可以去集成别人的技术 比如像Dao层的MyBatis J