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
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-Yaml配置
参考文献
YAML格式
以空格的缩进程度来控制层级关系。空格的个数并不重要,只要左边空格对齐
则视为同一个层级。注意不能用 tab 代替空格。且大小写敏感。支持字面值,
对象,数组三种数据结构,也支持复合结构。
字面值:字符串,布尔类型,数值,日期。字符串默认不加引号,单引号会转
义特殊字符。日期格式支持 yyyy/MM/dd HH:mm:ss
对象:由键值对组成,形如 key:(空格)value 的数据组成。冒号后面的空格是
必须要有的,每组键值对占用一行,且缩进的程度要一致,也可以使用行内写
法: {k1: v1, ....kn: vn}
数组:由形如 -(空格)value 的数据组成。短横线后面的空格是必须要有的,每
组数据占用一行,且缩进的程度要一致,也可以使用行内写法: [1,2,...n]
复合结构:上面三种数据结构任意组合
示例
12345678910userinfo: age: 25 name: myjszl active: true created-date: 2018/03/31 16:54:30 map: {k1: v1 ...
SpringBoot-日志切面
参考文献
又被逼着优化代码,这次我干掉了出入参 Log日志
注解
123456789101112131415161718192021222324252627282930package com.holelin.sundry.annotation;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * @Description: * @Author: HoleLin * @CreateDate: 2022/1/12 2:37 PM * @UpdateUser: HoleLin * @UpdateDate: 2022/1/12 2:37 PM * @UpdateRemark: 修改内容 * @Version: 1.0 */@Target( ...
SpringBoot-注解@ConfigurationProperties
参考文献
@ConfigurationProperties注意点
@ConfigurationProperties
@ConfigurationProperties 通过setter和构造器来设置field的值, 并且支持级联绑定属性
配置文件中的属性个数可以和POJO中的field个数不一样, 如果这样那么field就使用默认值或是初始值
要想使@ConfigurationProperties生效, 可以通过@Component, 或是在配置类上使用@EnableConfigurationProperties, 并且指定value来使properties文件的值自动注入到对应pojo的属性中(同时会将该POJO注入到IoC)
@ConfigurationProperties 不能与@EnableConfigurationProperties 一起标注在同一个类上
可以在@ConfigurationProperties标注的类上使用@Validated在来校验field的绑定
如果一个类标明了@ConfigurationProperties, 不会对内部类生效, 需要另外配置(因 ...