Springboot 2使用SpringApplication

来源:https://www.cnblogs.com/bigshark/archive/2019/08/14/11349557.html
-Advertisement-
Play Games

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

應用程式事件的發送順序

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 裝飾器模式的目的——**核心部分和裝飾部分可以自由組合。** 裝飾器模式要求: - 裝飾可選 - 裝飾可擴展 - 核心部分可擴展 ...
  • 顧名思義,創建型模式的聚焦點在如何創建對象能夠將對象的創建與使用最大化的分離從而降低系統的耦合度。 ...
  • 前言 我們終於學習最後一個設計原則了,其實博主更新的還是挺慢的,因為我想一個一個吃透以後再繼續學習,切記不要囫圇吞棗。 基本介紹 其實這個能說的內容很少,就是: 儘量使用合成/聚合的方式,而不是使用繼承 為什麼要這樣做?有一下兩點原因: 1. 通過繼承來進行復用的主要問題在於繼承復用會破壞系統的封裝 ...
  • 前言 迪米特法則,聽名字有點奇怪,但是這個法則真的非常非常有意思,在我看來,這個法則其實描述的就是一個矜持的小姑娘,害羞的惹人憐愛。但是啊,姑娘雖好,切不可"貪杯"哦~ 基本介紹 1. 一個對象應該對其他對象保持最少的瞭解。 2. 類與類關係越密切,耦合度越大 3. 一個類對自己依賴的類知道的越少越 ...
  • 作者:_liuxx cnblogs.com/liuyh/p/8027833.html 前後端分離模式下,所有的交互場景都變成了數據,傳統業務系統中的許可權控制方案在前端已經不再適用,因此引發了我對許可權的重新思考與設計。對於非前後端分離模式下的許可權思考,看這裡:通用數據許可權的思考與設計 許可權控制到底控制 ...
  • 什麼是建造者模式? 工廠模式聚焦於創建出一個對象,而建造者除此之外還需要為創建的對象賦值。 簡單來說,建造者模式=創建對象+屬性賦值。 建造者模式應用場景 建造者模式適合創建 類中包含多個參數且需要定製化 的情況。 簡單來說,建造者模式的目的就是創造 一條龍服務 :不僅創建出對象,順便給屬性賦值。 ...
  • 簡單來說,通過複製的方式創建對象。 【舉個慄子】:點外賣的收貨地址 ...
  • 和單例模式相似,工廠模式同樣聚焦於在考慮整個軟體構建的情況下合理創建對象,從而保證軟體的擴展性和穩定性。 簡單工廠模式:適用客戶端無需擴展的應用場景 //工廠方法模式:適合客戶端創建單個產品的應用場景 //抽象工廠模式:適合創建多個產品(產品固定)的應用場景 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...