SpringApplication 使用靜態方法 使用構造器 使用 builder 1、失敗分析器 初始化實現了 FailureAnalyzer 介面的失敗分析器,可以在啟動失敗時,列印錯誤日誌和解決操作方法。比如啟動埠被占用時列印如下日誌: 2、自定義 Banner 可以將 banner.txt ...
SpringApplication
使用靜態方法
SpringApplication.run(MySpringConfiguration.class, args);
使用構造器
SpringApplication app = new SpringApplication(MySpringConfiguration.class);
app.setBannerMode(Banner.Mode.OFF);
app.run(args);
使用 builder
new SpringApplicationBuilder(Application.class)
.bannerMode(Banner.Mode.OFF)
.run(args);
1、失敗分析器
初始化實現了 FailureAnalyzer 介面的失敗分析器,可以在啟動失敗時,列印錯誤日誌和解決操作方法。比如啟動埠被占用時列印如下日誌:
2019-08-07 10:22:32.534 ERROR 2616 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
The Tomcat connector configured to listen on port 1111 failed to start. The port may already be in use or the connector may be misconfigured.
Action:
Verify the connector's configuration, identify and stop any process that's listening on port 1111, or configure this application to listen on another port.
2、自定義 Banner
可以將 banner.txt 文件添加到類路徑或配置 spring.banner.location 屬性指定該文件的路徑來自定義 Banner。 如果文件的編碼不是 UTF-8,則可以配置 spring.banner.charset 指定編碼。 除了文本文件,還可以將 banner.gif、banner.jpg、banner.png 圖片文件添加到類路徑,或者配置 spring.banner.image.location 指定圖片路徑。 圖片會轉換為 ASCII 圖形後,在列印 banner.txt 之前列印。
還可以在 banner.txt 添加變數,比如 ${spring-boot.version} 獲取當前 Springboot 版本。
可以通過編碼或者配置的方式指定 Banner 的輸出方式:
編碼方式:SpringApplication.setBanner(Mode.CONSOLE)
或 SpringApplicationBuilder.bannerMode(Mode.CONSOLE)
配置文件:spring.main.banner-mode=console
- OFF:禁止列印
- CONSOLE:用 System.out 答應到控制台
- LOG:列印到日誌文件
3、應用程式事件和監聽器
可以使用 SpringApplication.addListeners() 或 SpringApplicationBuilder.listeners() 註冊事件監聽器;
還可以創建文件 META-INF/spring.factories,key 是 org.springframework.context.ApplicationListener,value 是監聽器實現類,示例如下;
org.springframework.context.ApplicationListener=com.example.project.MyListener
應用程式事件的發送順序
- ApplicationStartingEvent 在應用啟動但是還沒做任何處理(除了監聽器和初始化器)之前發送
- ApplicationEnvironmentPreparedEvent 在上下文需要的環境 Environment 已知,上下文創建之前發送
- ApplicationPreparedEvent 在刷新開始之前,載入 bean 定義之後發送
- ApplicationStartedEvent 在刷新上下文之後,調用應用程式和命令行運行程式之前發送
- ApplicationReadyEvent 在調用應用程式和命令行運行程式之後發送。表示應用程式已準備好為請求提供服務。
- ApplicationFailedEvent 啟動發生異常時發送
監聽器相關原理見 Spring事件監聽器源碼
4、Web 環境
指定 web 環境:SpringApplication.setWebApplicationType(WebApplicationType.SERVLET)
或 SpringApplicationBuilder.web(WebApplicationType.SERVLET)
WebApplicationType
- NONE:非 web 環境,上下文使用
AnnotationConfigApplicationContext
- SERVLET:Spring MVC 環境,上下文使用
AnnotationConfigServletWebServerApplicationContext
- REACTIVE:Spring WebFlux 環境,上下文使用
AnnotationConfigReactiveWebServerApplicationContext
5、指定參數 args
如使用 debug 模式運行程式:java -jar myproject.jar --debug
6、使用 ApplicationRunner 和 CommandLineRunner
實現這兩個介面,可以在應用程式啟動後,執行一些操作,預設會先執行 ApplicationRunner。
7、應用退出
每個 Springboot 應用都會向 JVM 註冊一個關閉鉤子,以確保ApplicationContext
在退出時正常關閉。 可以使用所有標準的 Spring 生命周期回調(例如DisposableBean
介面或@PreDestroy
註解)。
此外,如果 bean 希望在調用SpringApplication.exit()
時返回特定的退出碼,則可以實現org.springframework.boot.ExitCodeGenerator
介面。 然後將退出代碼傳遞給System.exit()
,如下所示:
@SpringBootApplication
public class ExitCodeApplication {
@Bean
public ExitCodeGenerator exitCodeGenerator() {
return () -> 42;
}
public static void main(String[] args) {
System.exit(SpringApplication.exit(SpringApplication.run(Bootstrap.class, args)));
}
}
ExitCodeGenerator
介面也可以通過異常方式實現。發生此類異常時,Spring Boot 返回實現的getExitCode()
方法的退出碼。
8、管理功能
通過指定spring.application.admin.enabled
屬性,可以為應用程式啟用管理功能。 這會在MBeanServer
平臺上公開SpringApplicationAdminMXBean
。 可以使用此功能遠程管理 Spring Boot 應用程式。 此功能對於任何服務包裝器的實現也很有用。
註意:啟用此功能時要小心,因為 MBean 公開了一種關閉應用程式的方法。