SpringBoot-杂项
参考文献
SpringBoot Jar目录结构
BOOT-INF/classes目录存放应用编译后的class文件
BOOT-INF/lib目录存放应用依赖的JAR包
META-INF/目录存放应用相关的元信息,如MANIFEST.MF文件
org/目录存放SpringBoot相关的class文件
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113.├── BOOT-INF│ ├── classes│ │ ├── application.yaml│ │ └── cn│ │ └── holelin│ │ ├── NiiH ...
SpringBoot-自动生成spring-configuration-metadata.json文件
参考文献
spring-configuration-metadata.json文件是做啥的?
spring-configuration-metadata.json作用
在编写好自定义配置项后,可以在application.yaml自动提示
实现步骤
添加依赖
12345<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional></dependency>
添加注解(可选,不加idea会红色波浪线提示,对于实际使用没影响)
12345678@EnableConfigurationProperties@ConfigurationPropertiesScan@SpringBootApplication(exclude = MongoAuto ...
SpringBoot-整合WebService
参考文献
SpringBoot整合WebService
Spring-SpEL
参考文献
Spring Expression Language (SpEL)
SpEL表达式总结
Spring Expression Language (SpEL)
支持的功能
功能
说明
Literal expressions
字面量表达式
Boolean and relational operators
布尔和关系运算符
Regular expressions
正则表达式
Class expressions
类表达式
Accessing properties, arrays, lists, and maps
访问属性、数组、列表和映射
Method invocation
方法调用
Assignment
赋值
Calling constructors
调用构造函数
Bean references
Bean引用
Array construction
数组构建
Inline lists
内联列表
Inline maps
内嵌Map
Ternary operator
三元运算符
Variable ...
SpringCloudAlibaba-Nacos
参考文献
黑马讲义
Nacos-服务发现以及配置中心
什么是配置
配置主要有以下几个特点:
配置独立于程序的只读变量
配置对于程序是只读的,程序通过读取配置来改变自己的行为,但是程序不应该去改变配置
配置伴随应用的整个生命周期
配置贯穿于应用的整个生命周期,应用在启动通过读取配置来初始化,在运行时根据配置调整行为.
比如启动时需要读取服务的端口号,系统在运行过程中需要读取定时策略执行定时任务等.
配置可以有多种加载方式
常见的有程序的硬编码,配置文件,环境变量,启动参数,基于数据库等
配置需要治理
同一份程序在不同环境(开发,测试,生产),不同集群(如不同的数据中心)经常需要有不同的配置,所以需要有完善的环境,集群配置管理
什么是配置中心
配置中心的服务流程如下:
用户在配置中心更新配置信息
服务A和服务B及时得到配置更新通知,从配置中心获取配置
总得来说,配置中心就是一种统一管理各种应用配置的基础服务组件
在传统巨型单体应用纷纷转向细粒度微服务架构的历史进程中,配置中心是微服务化不可缺少的一个系统组件,在这种背景下中心化的配置服务即 ...
SpringBoot-SpringBoot项目启动流程分析
参考文献
SpringBoot源码分析(二)启动类流程
启动流程
基于SpringBoot 2.7.x
构造函数
123456789101112131415161718192021222324252627282930313233343536373839public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) { // 设置资源加载器 this.resourceLoader = resourceLoader; Assert.notNull(primarySources, "PrimarySources must not be null"); // 初始化加载资源类集合并去重 // 将启动类设置为属性存入primarySources (设置要加载的基础资源) this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources)); // TODO ...
SpringBoot-SpringMVC在SpringBoot项目中组件启动流程
参考文献
SpringMVC执行流程
DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心.用户发出请求,DispatcherServlet接收请求并拦截请求.
HandlerMapping为处理器映射.DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler
HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器
HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等
HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler
Handler让具体的Controller执行
Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView
HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet
DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传 ...
SpringBoot-一个请求的处理全过程(未完待后续补充完整)
参考文献
请求流程
Tomcat线程接受到请求,经过一系列调用后,调用到ApplicationFilterChain的doFilter方法.doFilter方法调用ApplicationFilterChain的internalDoFilter方法,依次执行过滤器链的每个Filter的doFilter.
javax.servlet.http.HttpServlet#service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
3. org.springframework.web.servlet.FrameworkServlet#service
4. javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
5. org.springframework.web.servlet.FrameworkServlet#doXXX
XXX: 表 ...
SpringBoot-注解@EnableAutoConfiguration自动装配原理
参考文献
SpringBoot 自动配置启动流程 为什么没有执行selectImports方法
@EnableAutoConfiguration注解
123456789101112131415161718192021222324252627282930@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@AutoConfigurationPackage// 入口@Import(AutoConfigurationImportSelector.class)public @interface EnableAutoConfiguration { /** * Environment property that can be used to override when auto-configuration is * enabled. */ String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautocon ...
SpringBoot-扩展点
参考文献
SpringBoot—扩展接口
SpringBoot扩展点
ApplicationContextInitializer
BeanDefinitionRegistryPostProcessor
BeanFactoryPostProcessor
InstantiationAwareBeanPostProcessor
SmartInstantiationAwareBeanPostProcessor
BeanFactoryAware
ApplicationContextAwareProcessor
BeanNameAware
InitializingBean
FactoryBean
SmartInitializingSingleton
CommandLineRunner
DisposableBean
ApplicationListener
ApplicationContextInitializer
123456package org.springframework.context;@FunctionalInterfacepublic interface Application ...