Java技术栈相关技术笔记索引
Java Web开发 Spring Boot 原理篇 微服务 Spring Cloud Spring Cloud Alibaba
Java Web开发 Spring Boot 原理篇 微服务 Spring Cloud Spring Cloud Alibaba
本文侧重📝记录SpringBoot3框架源码 官方文档 核心注解 理解SpringBoot源码的核心注解分别是组件注册注解、条件注解、属性绑定注解,这几个注解与SpringBoot的自动装配机制息息相关! 组件注册 组件注册是将对象存储到Spring boot的IoC容器中 @Component:将类作为组件注册到IoC容器中。 @ComponentScan 扫描指定路径下需要注册到容器中的组件。 @SpringBootApplication注解中默认将@SpringBootApplication所标注的类所在位置标注为扫描路径。 @Bean、@Scope:通常标注在方法上,将方法返回的对象注册到ioc容器中。 默认是单例(singleton) 通常用于导入第三方组件 可以通过@Scope来修改容器的作用域 singleton:单例模式(默认值),整个 Spring 容器中只创建一个 Bean 实例。 prototype:原型模式,每次获取 Bean 时都会创建一个新的实例。 request:每个 HTTP 请求创建一个 Bean,仅在 Web 应用中有效。 session:每个 HTTP Session 创建一个 Bean,仅在 Web 应用中有效。 @Import 通常用与将第三方组件导入到容器中 其他: 配置类组件注册注解:@Configuration、@SpringBootConfiguration。@Configuration = @Component, @SpringBootConfiguration = @Configuration + @Index Web开发类组件注册注解,@Controller、@Service、@Repository = @Component … 条件注解 @ConditionalOnXXX如果指定注解的条件成立,则触发指定行为,例子:@ConditionalOnClass, 如果类路径中存在这个类,则触发指定行为, 若将这个注解放在类级别,如果注解判断生效,则整个配置类生效 若放在方法级别,单独对这个方法进行注解判断 属性绑定 将容器中任意组件的属性值和配置文件的配置项的值进行绑定 @ConfigurationProperties、@EnableConfigurationProperties(常用于第三方组件的属性绑定,默认会把组件放到容器中) 绑定过程 给容器中注册组件(@Bean/@Component) 使用@ConfigurationProperties声明组件和配置文件的哪些配置项进行绑定 核心原理 启动过程 Listener从META-INF/spring.factories读到 引导:利用 BootstrapContext引导整个项目启动 starting: 应用开始,只要有了BootstrapContext就直接调用 prepareEnvironment: 配置环境变量,但是ioc还没创建 启动: contextPrepared: 创建ioc容器,但是sources(主配置类)还没加载。并关闭引导上下文。 contextLoaded:ioc容器加载。主配置类加载进去了。但是ioc容器还没刷新(我们的bean还没创建) started: ioc容器刷新了(所有的bean还没创建),但是runner没调用。 ready:ioc容器刷新了(所有的bean还没创建),而且runner调用完了。 运行: 以前步骤都正确执行,代表容器running 回调监听器 BootStrapRegistryInitializer:感知特定阶段:感知引导初始化 META-INF/spring....
🔗 Spring官方介绍 [⚠️Spring官方对Spring Cloud Alibaba的更新不及时] 🔗 Spring Cloud Alibaba官网 📝 代码记录 Nacos(服务注册与发现) Nacos(Dynamic Naming and Configuration Service, Nacos),一个易于构建 Al Agent 应用的动态服务发现、配置管理和AI智能体管理平台。 Nacos = Eureka + Config + Bus = Spring Cloud Consul Nacos官网 组件名 语言 CAP 服务健康检查 对外暴露接口 Spring Cloud集成 Eureka Java AP 可配支持 HTTP 已集成 Consul Go CP 支持 HTTP/DNS 已集成 Zookeeper Java CP 支持 客户端 已集成 Nacos Java AP 支持 客户端 已集成 Nacos 在阿里巴巴内部有超过 10 万的实例运行,已经过了类似双十一等各种大型流量的考验,Nacos默认是AP模式, 但也可以调整切换为CP,一般用默认AP即可。 下载与安装...
📝 代码记录 Consul(服务注册与发现 + 分布式配置管理) 拥有服务治理功能,实现微服务之间的动态注册与发现 ❌不在使用Eureka:1. 停更进维 2. 注册中心独立且和微服务功能解耦 Consul官网 Spring官方介绍 三个注册中心区别 组件名 语言 CAP 服务健康检查 对外暴露接口 Spring Cloud集成 Eureka Java AP 可配支持 HTTP 已集成 Consul Go CP 支持 HTTP/DNS 已集成 Zookeeper Java CP 支持 客户端 已集成 Nacos Java AP 支持 客户端 已集成 CAP 一个分布式系统最多只能同时满足其中的两个属性。 Consistency: 强一致性,每次读取都能获取到最近一次成功写入的数据。 Availablity: 可用性,每次请求都会在有限时间内返回结果,无论结果是否为最新。 Partition tolerance: 分区容错性,系统在遇到网络分区(节点之间无法通信)时仍能继续运作。(必须有) 经典CAP: AP(Eurake):当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。 CP:当网络分区出现后,为了保证一致性,系统返回错误信息。 当数据出现不一致时,虽然A, B上的注册信息不完全相同,但每个Eureka节点依然能够正常对外提供服务,这会出现查询服务信息时如果请求A查不到,但请求B就能查到。如此保证了可用性但牺牲了一致性结论:违背了一致性C的要求,只满足可用性和分区容错,即AP 当网络分区出现后,为了保证一致性,就必须拒接请求,否则无法保证一致性,Consul 遵循CAP原理中的CP原则,保证了强一致性和分区容错性,且使用的是Raft算法,比zookeeper使用的Paxos算法更加简单。虽然保证了强一致性,但是可用性就相应下降了,例如服务注册的时间会稍长一些,因为 Consul 的 raft 协议要求必须过半数的节点都写入成功才认为注册成功 ;在leader挂掉了之后,重新选举出leader之前会导致Consul 服务不可用。结论:违背了可用性A的要求,只满足一致性和分区容错,即CP 使用 ./consul --version # 查看版本号 ....