SpringBoot3启动源码解析
SpringBoot源码解析自动配置(SpringBootApplication) 自动配置是指根据我们添加的jar包依赖,会自动将一些配置类的bean注册进IOC容器,我们可以在需要的地方使用@Autowired或者@Resource等注解来使用。
那么SpringBoot是如何实现自动配置的呢,都把那些组件进行了自动配置?
首先需要从启动类说起。
被标注了SpringBootApplication的类为核心启动类,此注解是一个组合注解,,此注解中重要的就是SpringBootConfiguration、EnableAutoConfiguration、ComponentScan
123456789101112@Target(ElementType.TYPE) //注解的适用5范围,Type表示注解可以描述在类、接口、注解或枚举中@Retention(RetentionPolicy.RUNTIME) //表示注解的生命周期 Runtime表示运行时@Documented //表示该注解可以记录在javadoc中@Inherited // 表示可以被子类继承该注解//----- ...
Redis学习笔记
概述 Remote Dictionary Server(远程字典服务)是完全开源的,使用ANSIC语言编写遵守BSD协议,是一个高性能的Key-Value数据库提供了丰富的数据结构,例如String、Hash、List、Set、SortedSet等等。数据是存在内存中的,同时Redis支持事务、持久化、LUA脚本、发布/订阅、缓存淘汰、流技术等多种功能特性提供了主从模式、Redis Sentinel和Redis Cluster集群架构方案。
主流功能
分布式缓存,挡在数据库之前得到带刀护卫,可以避免频繁请求直接访问到数据库,对数造成压力
内存存储和持久化,redis支持异步将内存中的数据写到硬盘,同时不影响继续服务
高可用架构搭配(单机,主从,哨兵,集群)
缓存穿透、击穿、雪崩避免
分布式锁
队列
排行榜|点赞
优势
性能极高,redis能读的速度是110000次/秒,写的速度是81000次/秒
redis数据类型丰富,不仅支持简单的key-value类型的数据,同时还提供了list、set、zse、hash等数据结构的存储
redis支持数据的持久 ...
RabbitMQ学习笔记
消息队列MQ的相关概念什么是MQMQ(message queue),从字面意思上看,本质是个队列,FIFI先进先出,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。使用MQ之后,消息发送上游只需要依赖MQ,不用依赖其他服务。
为什么使用MQ
流量消峰
应对流量高峰期时,服务处理能力有限,对于多出的数据无法处理,而使用消息队列作为缓冲,则可对数据缓存至消息队列以达到消峰。
应用解耦
例如电商系统中,包含有订单、库存、物流等系统,订单创建后需要对其他服务进行数据处理,如果耦合严重,当其中一个节点出现问题时都会导致订单失败。当转为消息队列的方式后,系统间的调用会减少很多,当其中一个系统故障时,将消息放在消息队列中,等故障服务恢复后,对队列中的消息进行消费处理即可。
异步处理
有些服务间调用是异步的,例如 A 调用 B,B 需要花费很长时间执行,但是 A 需要知道 B 什么时候可 以执行完。使用消息队列时可以很方便解决这个问题,A 调用 B 服务后,只需要监听 B 处理完成的消息,当 B 处理完成后,会发送一条消息给 MQ,MQ 会将此 消息转发给 ...
Spring Cloud Gateway
随着微服务开发与使用越来越广泛,单组件服务也越来越多,导致服务的维护变得复杂,试想如果使用nginx作为负载均衡,当服务增加一个就需要重新配置nginx,这样就使得项目的维护成本与难度越来越高,于是网关在微服务开发中就成为了也不可或缺的存。
网关可以作为服务的统一入口,封装应用程序的内部结构,客户端提供统一服务,一些与也无无关的公共逻辑也可以放在网关实现,如认证、鉴权、监控、路由转发等。
本文就Spring Cloud Gateway记录一下我自己的学习笔记。
Spring Cloud Gateway 功能特征
动态路由:能够匹配任何请求属性;
支持路径重写;
集成 Spring Cloud 服务发现功能(Nacos、Eruka);
可集成流控降级功能(Sentinel、Hystrix);
可以对路由指定易于编写的 Predicate(断言)和 Filter(过滤器);
核心概念
路由(route)
路由是网关中最基础的部分,路由信息包括一个ID、一个目的URI、一组断言工厂、一组Filter组成。如果断言为真,则说明请求的URL和配置的路由匹配。
断言(predicates ...
基于redis订阅实现分布式websocket
最近在使用websocket过程中,由于使用分布式多节点方式,前端连接到ws时后端会有一个session,使用这个session可以由服务端主动发送消息给前端,首先想象到的是能否把session共享给其他节点,看WsSession源码,发现WsSession并没有系列化,所以无法共享;
12public class WsSession implements Session {}
后来发现可以通过redis广播的方式,这样做前提是当前端连接时将对应的key放入缓存,断开时将key移出缓存,其他配置就按照正常单节点websocket配置即可,当消息到来时,先判断是否判断待接受key对应连接用户是否在当前节点,如果在则直接发送,如果不在则查询缓存,缓存中存在时,则将消息通过redis广播转给其他节点,当其他节点接收到广消息时,查询对应的key是否当前节点,如果在就查询对应的session发送前端。
于是我便自己写了有一个工具jar,可以方便后续使用,在这里分享出来。
pom中加入依赖12345678910111213141516171819<dependenc ...
ErrorMvcAutoConfiguration自动配置原理
本文主要对ErrorMvcAutoConfiguration进行说明
在web开发过程中总会遇到各种各样的错误,错误页面可以给予我们很好的帮助,本文介绍下springboot中的错误页面的自动配置与定制错误页面。
使用SpringBoot开发Web项目时,可以看到是有默认的错误处理 1)浏览器访问不存在的请求地址时,包含有时间、状态码等信息。 2)使用postman(非浏览器客户端)发送请求,返回的则是json数据
会出现这种现象是由于请求头的原因 浏览器发送请求会携带有text/html的请求头 如下 而非浏览器请求头中不包含这个值 首先需要将Developer Tools调试出来
ErrorMvcAutoConfiguration原理 步骤:一但系统出现4xx或者5xx之类的错误;ErrorPageCustomizer就会生效(定制错误的响应规则);就会来到/error请求;就会被BasicErrorController处理;
在这个自动配置类中可以看到有以下组件
1.DefaultErrorAttributes页面能获取的信息;
ti ...
windows环境下zookeeper的配置与常用客户端命令
本文主要介绍下zookeeper的安装部署,以及部分常用的客户端命令
首先下载zookeeper 选择版本下载即可
地址如下 zookeeper下载地址
下载完成后解压即可
配置文件下载完成后在conf文件夹下可以看到一个zoo_sample.cfg文件 需要复制此文件并改名为zoo.cfg,然后做一下配置
1234567891011# 对部分配置做以下说明 其余使用默认即可# 数据放置路径dataDir=D:/MyWeb/zookeeper-3.4.11/tmp/zookeeper# zookeeper端口 对cline端提供服务clientPort=2181# 如果要集群的话添加如下配置即可,其中2888端口作用为选举leader使用,3888作用为集群内机器通讯使用(Leader监听此端口) 另外集群时还要注意zookeeper的半数机制#server.0=192.168.146.200:2888:3888#server.1=192.168.146.201:2888:3888#server.2=192.168.146.202:2888:3888
服务启动12# 直接执行以下 ...
windows环境单机搭建kafka配置与测试
本文介绍下kafka部分配置 启动以及部分命令测试
首先下载zookeeper与kafka 选择版本下载即可
地址如下 zookeeper下载地址 kafka下载地址
下载完成后需要进行简单配置
zookeeper配置与启动见另一篇文章
kafka配置1234567###进入config目录 修改server.properties文件# 表示broker的id 必须为不重复的数字broker.id=0# 此处参数名虽为日志 但是其实是数据保存路径 日志文件夹(logs)会自动生成log.dirs=D:/MyWeb/kafka_2.13-2.5.0/tmp/kafka-logs# 配置注册中心地址 端口zookeeper.connect=127.0.0.1:2181
kafka 启动windows
12##首先需要进入kafka目录.\bin\kafka-server-start.sh -daemon .\config\server.properties
linux
12##首先需要进入kafka目录./bin/kafka-server-start.sh -daemon ./con ...
HttpMessageConvertersAutoConfiguration自动配置类
在我们日常的web开发过程中肯定都用过@RequestBody、@ResponseBody注解,其作用就是将输入输出参数解析成Json,但是Http请求和响应都是基于报文的,意味着浏览器与服务器之间的交互时通过原始文本进行数据同i性能的,这里其实就是HttpMessageConverter在起作用。
首先来看下HttpMessageConvertersAutoConfiguration配置类的源码
HttpMessageConvertersAutoConfiguration源码12345678910111213141516171819202122232425262728293031323334353637383940414243444546@Configuration(proxyBeanMethods = false) //标明是配置类@ConditionalOnClass(HttpMessageConverter.class)//在此类存在时生效@Conditional(NotReactiveWebApplicationCondition.class) //判断非Reactive ...
WebMvcAutoConfiguration自动配置
今天来学习下WebMvcAutoConfiguration的自动配置,Spring mvc在web开发过程中是被使用最多的,开发中的各种各样的请求都跟spring mvc有关,所以有必要研究下spring boot中的这个配置类。
通过访问官方说明文档可以看到以下内容:官网地址
Spring Boot为Spring MVC提供了自动配置
自动配置在Spring的默认值之上添加了以下功能
包含 ContentNegotiatingViewResolver 和 BeanNameViewResolver
自动配置了ViewResolver(视图解析器:根据方法的返回值得到对应的视图对象(View),视图对象决定如何渲染(是转发 还是重定向))
ContentNegotiatingViewResolver :组合所有的试图解析器
如何定制:我们可以自己给容器中添加一个视图解析器,即可自动完成
Support for serving static resources, including support for WebJars 静态资源文件夹路径和webjars.
Stati ...
