读书笔记 -- 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

 

posted on 2023-07-31 10:26  bruce_he  阅读(24)  评论(0编辑  收藏  举报