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 公開了一種關閉應用程序的方法。