SpringApplication類提供了一種從main()方法啟動Spring應用的便捷方式。在很多情況下, 你只需委托給 SpringApplication.run這個靜態方法 : @SpringBootApplication public class SpringbootLearningApp ...
SpringApplication類提供了一種從main()方法啟動Spring應用的便捷方式。在很多情況下, 你只需委托給 SpringApplication.run這個靜態方法 :
@SpringBootApplication
public class SpringbootLearningApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootLearningApplication.class, args);
}
}
當應用啟動時, 你應該會看到類似下麵的東西:
預設情況下會顯示INFO級別的日誌信息, 包括一些相關的啟動詳情, 比如啟動應用的用戶等。
自定義Banner
通過在classpath下添加一個banner.txt或設置banner.location來指定相應的文件可以改變啟動過程中列印的banner。如果這個文件有特殊的編碼,你可以使用banner.encoding設置它(預設為UTF-8)。
在banner.txt中可以使用如下的變數:
變數 | 描述 |
---|---|
application.version | MANIFEST.MF中聲明的應用版本號, 例如1.0 |
application.formatted- version | MANIFEST.MF中聲明的被格式化後的應用版本號(被括弧包裹且以v作為首碼),用於顯 示,例如(v1.0) |
spring-boot.version | 正在使用的Spring Boot版本號, 例如3.2.3 |
spring-boot.formatted-version | 正在使用的Spring Boot被格式化後的版本號(被括弧包裹且以v作為首碼), 用於顯示,例如(v3.2.3) |
註:如果想以編程的方式產生一個banner,可以使用SpringBootApplication.setBanner(…)方法。使用org.springframework.boot.Banner介面,實現你自己的printBanner()方法。
自定義SpringApplication
如果預設的SpringApplication不符合你的口味,你可以創建一個本地的實例並自定義它。例如,關閉banner你可以這樣寫:
@SpringBootApplication
public class SpringbootLearningApplication {
public static void main(String[] args) {
SpringApplication app =new SpringApplication(SpringbootLearningApplication.class);
app.setBannerMode(Banner.Mode.OFF);
app.run(args);
}
}
註:傳遞給SpringApplication的構造器參數是spring beans的配置源。在大多數情況下,這些將是@Configuration類的引用,但它們也可能是XML配置或要掃描包的引用。
Application事件和監聽器
除了常見的Spring框架事件,比如ContextRefreshedEvent,一個SpringApplication也發送一些額外的應用事件。一些事件實際上是在ApplicationContext被創建前觸發的。
你可以使用多種方式註冊事件監聽器,最普通的是使用SpringApplication.addListeners(…)方法。在你的應用運行時,應用事件會以下麵的次序發送:
- 在運行開始,但除了監聽器註冊和初始化以外的任何處理之前,會發送一個ApplicationStartedEvent。
- 在Environment將被用於已知的上下文,但在上下文被創建前,會發送一個ApplicationEnvironmentPreparedEvent。
- 在refresh開始前,但在bean定義已被載入後,會發送一個ApplicationPreparedEvent。
- 啟動過程中如果出現異常,會發送一個ApplicationFailedEvent。
註 :你通常不需要使用應用程式事件, 但知道它們的存在會很方便(在某些場合可能會使用到)。在Spring內部, Spring Boot使用事件處理各種各樣的任務。
Web環境
一個SpringApplication將嘗試為你創建正確類型的ApplicationContext。在預設情況下,使用AnnotationConfigApplicationContext或AnnotationConfigEmbeddedWebApplicationContext取決於你正在開發的是否是web應用。
用於確定一個web環境的演算法相當簡單(基於是否存在某些類)。如果需要覆蓋預設行為,你可以使用setWebEnvironment(boolean webEnvironment)。通過調用setApplicationContextClass(…),你可以完全控制ApplicationContext的類型。
註: 當JUnit測試里使用SpringApplication時,調用setWebEnvironment(false)是可取的。
命令行啟動器
如果你想獲取原始的命令行參數,或一旦SpringApplication啟動,你需要運行一些特定的代碼,你可以實現CommandLineRunner介面。在所有實現該介面的Spring beans上將調用run(String … args)方法。
@Component
public class MyBean implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("啟動前執行");
}
}
如果一些CommandLineRunner beans被定義必須以特定的次序調用, 你可以額外實現org.springframework.core.Ordered介面或使用org.springframework.core.annotation.Order註解。
Application退出
每個SpringApplication在退出時為了確保ApplicationContext被優雅的關閉, 將會註冊一個JVM的shutdown鉤子。所有標準的Spring生命周期回調(比如, DisposableBean介面或@PreDestroy註解)都能使用。
此外, 如果beans想在應用結束時返回一個特定的退出碼(exit code),可以實現org.springframework.boot.ExitCodeGenerator介面。