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全家桶 的相关文章

  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s

随机推荐

  • 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