读书笔记 -- Spring Boot3 核心技术 Chapter4 Spring Boot 启动过程与扩展应用
4.1 启动入口
1. 应用启动类
@SpringBootApplication:用于标注Spring Boot的启动类。它是@SpringBootApplication注解的一个派生注解,用于告诉Spring Boot这是一个Spring Boot应用程序的入口点
包括:
- @SpringBootConfiguration
- @EnableAutoConfiguration
- @ComponontScan
一般建议启动入口类放置在根目录下,以便使用注解扫描并管理所有子目录包的组件。
2. 应用启动方法
// 1. SpringApplication 直接调用 run() SpringApplication.run(Application.class); // 2. SpringApplication 创建对象并调用 run() SpringApplicaiton springApplication = new SpringApplication(Application.class); // 自定义设置 springApplication.xxx(); springApplication.run(args); // 3. SpringApplicationBuilder new SpringApplicationBuilder() .sources(Parent.class) .child(Application.class) .bannerMode(Banner.Mode.OFF) .run(args);
4.3 启动失败分析 FailureAnalyzer
1. 重写 FailureAnalyzer
测试重写 PortInUseFailureAnalyzer
1) \analyzer\PortInUseFailureAnalyzer:Override 覆盖
2) \resources\META-INF\spring.factories,注册 PortInUseFailureAnalyzer
2. 自定义 FailureAnalyzer
1) analyzer\JavastackFailureAnalyzer
2) spring.factories,注册该 FailureAnalyzer
*** 备注:自定义的 FailureAnalyzer 需要注册在 spring.factories 里。如果放在 新的自动配置类注册文件中(....\*.imports)也不会生效。
4.5 启动图案
1. 关闭 Banner
// 方式1:启动类中关闭 springApplication.setBannerMode(Banner.Mode.OFF); // 方式2:配置文件中通过参数关闭(如 application.yml) spring: main: banner-mode: off
2. 自定义图案
在 resource\ 下,创建一个 banner.txt,如
____. __ __ | |____ ___ _______ _______/ |______ ____ | | __ | \__ \\ \/ /\__ \ / ___/\ __\__ \ _/ ___\| |/ / /\__| |/ __ \\ / / __ \_\___ \ | | / __ \\ \___| < \________(____ /\_/ (____ /____ > |__| (____ /\___ >__|_ \ \/ \/ \/ \/ \/ \/ Spring Boot Version: ${spring-boot.version}
4.6 启动事件和监听器
1. 启动事件的顺序
Spring Boot 启动后,事件的顺序是:
- ApplicationStartingEvent
- ApplicationEnvironmentPreparedEvent
- ApplicationContextInitializedEvent
- ApplicationPreparedEvent
- ApplicationStartedEvent
- AvailabilityChangeEvent
- ApplicationReadyEvent
- AvailabilityChangeEvent
- ApplicationFailedEvent
- WebServerInitializedEvent
- ContextRefreshedEvent