SpringBoot文件之SpringApplication的閱讀筆記

jackieathome發表於2024-08-18
  • Reference

  • Core Features

  • SpringApplication

    使用SpringBoot開發應用,最簡單的啟動類,程式碼內容如下:

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class MyApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    
    }
    

    當SpringBoot應用程式啟動失敗時,透過定製FailureAnalyzer可以獲得詳細的錯誤描述資訊。
    SpringBoot允許應用開發者註冊自定義的FailureAnalyzer的實現類,實現方法可參考文件

    SpringBoot提供延遲初始化特性,允許Bean在使用時才完成構建和初始化操作,無需在啟動時即完成全部Bean的構建和初始化操作。
    使用延遲初始化特性的優點,可以加快應用程式啟動,縮短啟動時間。
    使用延遲初始化特性的缺點,應用啟動時只有部分必要的Bean完成了初始化,在處理業務時才會完成Bean的構建和初始化,可能掩蓋一些程式邏輯層面的問題。
    使用延遲初始化特性時,需要考慮為Java應用分配足夠的資源,避免觸發Bean的構建和初始化,由於資源不足而失敗。

    在配置檔案中增加如下配置,可以啟用延遲初始化特性:

    spring:
        main:
            lazy-initialization: true
    

    對於關鍵的Bean,不期望使用延遲初始化特性,可以在類名上增加註解@Lazy(false),關閉延遲初始化特性。

    如下是SpringBoot應用程式啟動時在控制檯輸出的Banner。

    .   ____          _            __ _ _
    /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
    \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
    '  |____| .__|_| |_|_| |_\__, | / / / /
    =========|_|==============|___/=/_/_/_/
    
    :: Spring Boot ::                (v3.3.2)
    

    SpringBoot允許開發者定製Banner,操作方法如下:

    • 在類路徑中增加檔案banner.txt
    • 使用屬性spring.banner.location指定banner.txt的位置。

    SpringBoot在讀取banner.txt時,預設檔案編碼為UTF-8。透過修改屬性spring.banner.charset,可以修改解析banner.txt時的編碼格式。

    關閉Banner,樣例程式碼,如下:

    import org.springframework.boot.Banner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class MyApplication {
    
        public static void main(String[] args) {
            SpringApplication application = new SpringApplication(MyApplication.class);
            application.setBannerMode(Banner.Mode.OFF);
            application.run(args);
        }
    }
    

    SpringBoot框架在應用啟動過程中,按序觸發如下事件:

    • ApplicationStartingEvent
    • ApplicationEnvironmentPreparedEvent
    • ApplicationContextInitializedEvent
    • ApplicationPreparedEvent
    • ApplicationStartedEvent
    • AvailabilityChangeEvent
    • ApplicationReadyEvent
    • AvailabilityChangeEvent
    • ApplicationFailedEvent

    對於實現介面ApplicationContextAware的Bean,SpringBoot應用初始化過程中會自動注入ApplicationContext物件的例項。

    對於一般的應用開發者而言,對上述事件僅做基本瞭解即可。

    透過定義Bean來接收ApplicationArguments,可以讀取SpringBoot應用啟動時的命令列引數。
    SpringApplication執行後,執行一些業務相關的程式碼,可以定義實現介面ApplicationRunner或者CommandLineRunner的Bean。
    SpringBoot允許開發者定義多個實現ApplicationRunner或者CommandLineRunner的Bean,這些Bean之間的執行順序,可以透過實現介面org.springframework.core.Ordered或者使用註解org.springframework.core.annotation.Order來定製。

    SpringBoot允許開發者透過實現ExitCodeGenerator介面的Bean來定製程式退出時的錯誤碼,藉以滿足特定執行環境、特定業務場景的訴求。

    修改SpringBoot應用的配置檔案,增加配置項spring.application.admin.enabled並指定為true,可以開啟管理特性。

    假如開發者使用Java 21來開發、執行SpringBoot應用程式,可以考慮增加如下配置項,並指定為true,從而啟用Java 21的virtual threads特性。

    • spring.threads.virtual.enabled
    • spring.main.keep-alive

相關文章