Springboot 2使用SpringApplication


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

應用程序事件的發送順序

  1. ApplicationStartingEvent 在應用啟動但是還沒做任何處理(除了監聽器和初始化器)之前發送
  2. ApplicationEnvironmentPreparedEvent 在上下文需要的環境 Environment 已知,上下文創建之前發送
  3. ApplicationPreparedEvent 在刷新開始之前,加載 bean 定義之后發送
  4. ApplicationStartedEvent 在刷新上下文之后,調用應用程序和命令行運行程序之前發送
  5. ApplicationReadyEvent 在調用應用程序和命令行運行程序之后發送。表示應用程序已准備好為請求提供服務。
  6. 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 公開了一種關閉應用程序的方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM